Error c2143 синтаксическая ошибка отсутствие перед class head

Ошибка компилятора C2143 синтаксическая ошибка: отсутствует «token1» перед «token2» Компилятор ожидал определенный маркер (т. е. элемент языка, отличный от пробела) и нашел вместо него другой маркер. Проверьте справочник по языку C++ , чтобы определить, где код синтаксически неверен. Так как компилятор может сообщить об этой ошибке после обнаружения строки, которая вызывает проблему, проверьте несколько […]

Содержание

  1. Ошибка компилятора C2143
  2. Error c2143 синтаксическая ошибка отсутствие перед class head
  3. Answered by:
  4. Question
  5. Answers
  6. All replies
  7. Error c2143 синтаксическая ошибка отсутствие перед class head
  8. Error c2143 синтаксическая ошибка отсутствие перед class head
  9. Error c2143 синтаксическая ошибка отсутствие перед class head

Ошибка компилятора C2143

синтаксическая ошибка: отсутствует «token1» перед «token2»

Компилятор ожидал определенный маркер (т. е. элемент языка, отличный от пробела) и нашел вместо него другой маркер.

Проверьте справочник по языку C++ , чтобы определить, где код синтаксически неверен. Так как компилятор может сообщить об этой ошибке после обнаружения строки, которая вызывает проблему, проверьте несколько строк кода, предшествующих ошибке.

C2143 может возникать в разных ситуациях.

Это может произойти, когда за оператором, который может квалифицировать имя ( :: , -> и . ), должно следовать ключевое слово template , как показано в следующем примере:

По умолчанию В C++ предполагается, что Ty::PutFuncType это не шаблон, поэтому следующее интерпретируется как знак меньшего. Необходимо явно сообщить компилятору, что PutFuncType является шаблоном, чтобы он смог правильно проанализировать угловую скобку. Чтобы исправить эту ошибку, используйте ключевое template слово для имени зависимого типа, как показано ниже:

C2143 может возникать, если используется /clr и using директива имеет синтаксическую ошибку:

Это также может произойти при попытке скомпилировать файл исходного кода с помощью синтаксиса CLR без использования /clr:

Первый символ без пробелов, следующий за оператором if , должен быть левой скобкой. Компилятор не может перевести ничего другого:

C2143 может возникать, когда закрывающая фигурная скобка, круглые скобки или точка с запятой отсутствуют в строке, в которой обнаружена ошибка, или в одной из строк выше:

Или при наличии недопустимого тега в объявлении класса:

Или, если метка не присоединена к оператору. Если необходимо поместить метку сама по себе, например в конце составного оператора, прикрепите ее к оператору NULL:

Эта ошибка может возникать, когда выполняется неквалифицированный вызов типа в стандартной библиотеке C++:

Или отсутствует ключевое typename слово:

Или при попытке определить явное создание экземпляра:

В программе C переменные должны быть объявлены в начале функции и не могут быть объявлены после того, как функция выполнит инструкции, не являющиеся объявлениями.

Источник

Error c2143 синтаксическая ошибка отсутствие перед class head

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

#ifndef DEPT_INCLUDED
#define DEPT_INCLUDED

typedef struct <
UL online;
UL positive_standalone;
UL negative_standalone;
UL sales;
> GROSS_TOTALS;

Error message is: «Error 1 error C2143: syntax error : missing ‘;’ before ‘ ‘» and it is point to «typedef struct <» line.

Can somebody help? Thanks.

Answers

typedef struct <
UL online;
UL positive_standalone;
UL negative_standalone;
UL sales;
> GROSS_TOTALS;

it’s:
typedef unsigned long int UL;

You should include this typedef before the structure definition!

#ifndef DEPT_INCLUDED
#define DEPT_INCLUDED

typedef unsigned long UL;

typedef struct <
UL online;
UL positive_standalone;
UL negative_standalone;
UL sales;
> GROSS_TOTALS;

#endif
Microsoft MVP — Visual C++
Blog: http://nibuthomas.com Posts are provided as is without warranties or guaranties.

What happens if you temporary put the expected ‘;’ before typedef? What is the first error displayed?

typedef struct <
UL online;
UL positive_standalone;
UL negative_standalone;
UL sales;
> GROSS_TOTALS;

If you’re using C++ why can’t you just do this:

There are 10 types of people in this world; those who understand binary and those who don’t.

I tried using the that code above but still.

‘CompileAs’ propertry for this project has been set to C++.

#ifndef DEPT_INCLUDED
#define DEPT_INCLUDED

typedef struct <
UL online;
UL positive_standalone;
UL negative_standalone;
UL sales;
> GROSS_TOTALS;
#endif

Источник

Error c2143 синтаксическая ошибка отсутствие перед class head

Если у вас не работает один из способов авторизации, сконвертируйте свой аккаунт по ссылке

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
error C2143: синтаксическая ошибка: отсутствие «;» перед «тип» [Jan. 4th, 2010|09:34 pm]

Допустим есть такой код на си в ms 2008 :

void temp1(void);
void temp2(void);
void temp1(void)
<
int five=5;
temp2();
int four=4;//здесь вываливается C2143
>
void temp2(void)
<
//не важно что
>

Короче говоря эта ошибка вываливается если объявлена переменная после вызова функции. В Code:Blocks (откуда я ушёл) такого не было. Почему?

Источник

Error c2143 синтаксическая ошибка отсутствие перед class head

Сообщения: 33
Благодарности: 12

Сообщения: 147
Благодарности: 5

\это файл ru.h
#include
char* Rus(const char* text);

char bufRus[256];
char* Rus(const char* text)
<
CharToOem(text, bufRus);
return bufRus;
>
ошибки у меня из-за windows.h, а если не подключать то не определяет CharToOem
в ручную не знаешь как описать CharToOem?

Сообщения: 147
Благодарности: 5

для cout у меня и так все работало, вот для printf() не получается кириллица

#ifndef _RUS_H
#define _RUS_H
#include
inline void rus( void )
<
setlocale( LC_CTYPE, «.1251» );
setlocale( LC_MONETARY, «.1251» );
return;
>
#endif »

Error c2143 синтаксическая ошибка отсутствие перед class head

Профессионал

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Репутация: 29

Установил впервые в жизни Microsoft Visual Studio 10 express.
Пытаюсь скомпилировать простенькое приложение, ничего не выходит, постоянно ругается на свой же файл winnt.h
Получаю следующие ошибки

Активный участник

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Репутация: 5

Я сталкивался в двух проявлениях:

1. В списке инклюдов windows.h и excpt.h должны стоять сразу перед winnt.h

2. Поместить $(_ARCHFAM_) или $(ARCHFAM) в препроцессор definition, или добавить /D «_X86_» или /D «X86» в коммандную строку билда

Профессионал

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Репутация: 29

winnt.h подключается в библиотеке nppapi, при этом не на прямую, а через windef.h. Сами исходники я менять не буду. Попробую инклюдники, что ты написал, в main-файл добавить, может поможет.

По второму пункту не очень понял что сделать нужно. Я до этого msvc не использовал, и сейчас копаться в его настройках как то не хочется. Я генерирую файл проекта при помощи cmake. Правильно ли я понял, что нужно добавить дефайн?
add_definitions(-D_X86_) или add_definitions(-DX86)

Источник

Adblock
detector

  • Remove From My Forums
  • Question

  • #ifndef DEPT_INCLUDED
    #define DEPT_INCLUDED

    typedef struct {
      UL online;
      UL positive_standalone;
      UL negative_standalone;
      UL sales;
     } GROSS_TOTALS;

    #endif
    ==============================================================

    Error message is: «Error 1 error C2143: syntax error : missing ‘;’ before ‘<class-head>'» and it is point to «typedef struct {» line.

    Can somebody help? Thanks.

Answers

  • Maybe your error is being «carried over» from a previous line or file. I just made a quick test and get the same error if I add a variable declaration without a «;»:

    <code>

    typedef unsigned long int UL;

    int x

    typedef struct {
      UL online; 
      UL positive_standalone; 
      UL negative_standalone; 
      UL sales; 
     } GROSS_TOTALS;

    #endif

    </code>

    Check the output window to find out in which source file the error happened, then look around the place where this code was located, and check any #included files before the one you’re reporting.

    • Marked as answer by

      Wednesday, November 25, 2009 8:56 AM

Hey there I understand this has been answered but for everyone else who comes past this,

I got the same error while going through a Youtube tutorial, possibly the same one you have. I did #include <string> but it didn’t solve the error for me. It turns out the error came from the last line of a separate file (picoPNG.h):

#pragma once

#include <vector>

extern int decodePNG(std::vector<unsigned char>& out_image, unsigned long& image_width, unsigned long& image_height, const unsigned char* in_png, size_t in_size, bool convert_to_rgba32 = true)

What I had to do was include the semi-colon after the last line so it ended up being:

#pragma once

#include <vector>

extern int decodePNG(std::vector<unsigned char>& out_image, unsigned long& image_width, unsigned long& image_height, const unsigned char* in_png, size_t in_size, bool convert_to_rgba32 = true);

Ben the tutor ends up fixing this bug in a later tutorial for me. So try to check out your other header files and see if there are any places where semi-colons have been left off.

Hope this helped someone!

molinari

0 / 0 / 0

Регистрация: 20.02.2012

Сообщений: 9

1

21.03.2012, 02:03. Показов 2261. Ответов 4

Метки нет (Все метки)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
class Densum
{
    public:
    
        double summa;
    Densum();
    ~Densum();
    Densum (const Densum&);
    Densum operator+(const Densum&);
    Densum operator-(const Densum&);
    bool operator==(const Densum&);
    bool operator!=(const Densum&);
    ostream& operator<<(const Densum&);
    istream& operator>>(const Densum&);
};
//конструктор без параметров
    Densum::Densum ()
    {summa = 0.0;}
//конструктор копирования
    Densum::Densum (const Densum& d)
    {summa=d.summa;}
//деструктор
    Densum::~Densum ()
    {};
//перегрузка операции сложения +
    Densum Densum::operator+(const Densum& b)
    {Densum t =*this;
    t.summa += b.summa;
    return t;}
//перегрузка операции вычитания -
    Densum Densum::operator-(const Densum& b)
    {Densum t =*this;
    t.summa -= b.summa;
    return t;}
//перегрузка операции сравнения ==
    bool Densum::operator==(const Densum& b)
    {return (summa==b.summa);}
    bool Densum::operator!=(const Densum& b)
    {return!(*this == b);}
//перегрузка функции <<
    ostream& operator<<(ostream& os,const Densum& b )
    {os << "vvedite summu" <<endl;
    return os;}
//перегрузка функции >>
    istream operator>>(istream& is, Densum& b)
    { cout <<"vvedite summu"<<endl;
    is>>b.summa;
    return is;}
    //главная программа
    int main()
    {Densum a,b,m;
    cout<<"vvod summu #1"<<endl;
    cin>>a;
    cout<<"vvod summu #2"<<endl;
    cin>>b;
    m=a-b;
        cout<<"vvod summu #1"<<endl;
        cin>>a;
        cout<<"vvod summu #2"<<endl;
        cin>>b;
        m=a+b;
    system("PAUSE");

Добавлено через 31 минуту

C++
1
error C2143: синтаксическая ошибка: отсутствие ";" перед "<class-head>"

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

21.03.2012, 02:20

2

у Вас две главные функции

C++
1
int _tmain(int argc, _TCHAR* argv[])

и

C++
1
int main()

сотрите

C++
1
int _tmain(int argc, _TCHAR* argv[])



1



112 / 64 / 23

Регистрация: 08.03.2012

Сообщений: 211

21.03.2012, 02:24

3

Нет ; после создания прототипа (причем _tmain а не main).

Цитата
Сообщение от molinari
Посмотреть сообщение

int _tmain(int argc, _TCHAR* argv[]);

+ закрывающей дужки

Цитата
Сообщение от molinari
Посмотреть сообщение

int main()
{Densum a,b,m;
cout<<«vvod summu #1″<<endl;
cin>>a;
cout<<«vvod summu #2″<<endl;
cin>>b;
m=a-b;
cout<<«vvod summu #1″<<endl;
cin>>a;
cout<<«vvod summu #2″<<endl;
cin>>b;
m=a+b;
system(«PAUSE»);
}



1



1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

21.03.2012, 02:29

4

Цитата
Сообщение от p_r_a_g_m_a
Посмотреть сообщение

Нет ; после создания прототипа int _tmain(int argc, _TCHAR* argv[]);

Какой прототип главной функции?



0



112 / 64 / 23

Регистрация: 08.03.2012

Сообщений: 211

21.03.2012, 02:31

5

Цитата
Сообщение от Infinity3000
Посмотреть сообщение

Какой прототип главной функции?

Ну это я об синтаксической ошибке. Например у WinMain объявляются прототипы в API



0



When I try to compile the following C-code with a nested function:

 #include <stdio.h>
int main() {
    
    int five() {
        return 5;
}

for (int i = 0; i < 10; i++) {
    printf("%d ", five());
    }

    return 0;
}

I obtain the following error:
error C2143: syntax error: missing ';' before '{' in C

I am using Visual Studio Community 2017 and its developer command line, so my compiler is cl.

When I compile the program with gcc, I get no error, so I suspect it’s related to the compiler, but how?

asked Feb 13, 2019 at 14:40

mand's user avatar

mandmand

1291 silver badge13 bronze badges

9

The compiler works «token» by «token». After int main() { it sees the tokens int, five, ( and ) which are part of a declaration of function five (returning int and accepting an unspecified, but fixed, number of arguments). This declaration is completed with the token ; but the next available token is { which makes the whole thing invalid syntax.

TLDR: nested functions are illegal in C.

answered Feb 13, 2019 at 14:54

pmg's user avatar

pmgpmg

105k12 gold badges125 silver badges198 bronze badges

4

Is this what you want to achieve?

#include <stdio.h>
int five() {
        return 5;
    }
int main() {
    for (int i = 0; i < 10; i++) {
    printf("%d ", five());
    }
    return 0;

}

answered Feb 13, 2019 at 14:45

Ahmed Soliman's user avatar

1

Properly formatted, with some start-end comments for clarity.

#include <stdio.h>

int five()   /* Start of Function FIVE */
{
    return 5;
}            /* End of Function FIVE */



int main()   /* Start of MAIN */
{
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", five());
    }

    return 0;
}             /* End of MAIN */

answered Feb 13, 2019 at 14:46

abelenky's user avatar

abelenkyabelenky

62.9k22 gold badges108 silver badges158 bronze badges

When I try to compile the following C-code with a nested function:

 #include <stdio.h>
int main() {
    
    int five() {
        return 5;
}

for (int i = 0; i < 10; i++) {
    printf("%d ", five());
    }

    return 0;
}

I obtain the following error:
error C2143: syntax error: missing ';' before '{' in C

I am using Visual Studio Community 2017 and its developer command line, so my compiler is cl.

When I compile the program with gcc, I get no error, so I suspect it’s related to the compiler, but how?

asked Feb 13, 2019 at 14:40

mand's user avatar

mandmand

1291 silver badge13 bronze badges

9

The compiler works «token» by «token». After int main() { it sees the tokens int, five, ( and ) which are part of a declaration of function five (returning int and accepting an unspecified, but fixed, number of arguments). This declaration is completed with the token ; but the next available token is { which makes the whole thing invalid syntax.

TLDR: nested functions are illegal in C.

answered Feb 13, 2019 at 14:54

pmg's user avatar

pmgpmg

105k12 gold badges125 silver badges198 bronze badges

4

Is this what you want to achieve?

#include <stdio.h>
int five() {
        return 5;
    }
int main() {
    for (int i = 0; i < 10; i++) {
    printf("%d ", five());
    }
    return 0;

}

answered Feb 13, 2019 at 14:45

Ahmed Soliman's user avatar

1

Properly formatted, with some start-end comments for clarity.

#include <stdio.h>

int five()   /* Start of Function FIVE */
{
    return 5;
}            /* End of Function FIVE */



int main()   /* Start of MAIN */
{
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", five());
    }

    return 0;
}             /* End of MAIN */

answered Feb 13, 2019 at 14:46

abelenky's user avatar

abelenkyabelenky

62.9k22 gold badges108 silver badges158 bronze badges

Здравствуйте, я пишу IOManager, но я получаю эту ошибку:

Error   1   error C2143: syntax error : missing ';' before '<class-head>'

Мой код такой:

#pragma once
#include <vector>

class IOManager{
public:
static bool readFileToBuffer(std::string filePath, std::vector<unsigned char>& buffer);
};

Я не знаю, что я сделал не так!

1

Решение

Ты используешь std::string, но не включал <string> заголовок. Добавьте эту строку в начало:

#include <string>

Итак, вы получите:

#pragma once

#include <string>
#include <vector>

class IOManager{
public:
static bool readFileToBuffer(std::string filePath, std::vector<unsigned char>& buffer);
};

Он должен работать.

3

Другие решения

Я получил это в своем коде C ++ для нереальный двигатель.
Это потому, что я забыл точка с запятой в конце объявления класса
в моем файле заголовка (.h).

class MyClass{
private: //Stuff here
public:  //Stuff here
}; //<--------DONT FORGET THE SEMICOLON

1

Привет, я понимаю, что на это ответили, но для всех остальных, кто проходит мимо,

Я получил ту же ошибку при просмотре учебника на YouTube, возможно, того же, что и у вас. я сделал #include <string> но это не решило ошибку для меня. Оказывается, ошибка пришла из последней строки отдельный файл (PicoPNG.h):

#pragma once

#include <vector>

extern int decodePNG(std::vector<unsigned char>& out_image, unsigned long& image_width, unsigned long& image_height, const unsigned char* in_png, size_t in_size, bool convert_to_rgba32 = true)

Что мне нужно было сделать, так это включить точку с запятой после последней строки, чтобы получилось:

#pragma once

#include <vector>

extern int decodePNG(std::vector<unsigned char>& out_image, unsigned long& image_width, unsigned long& image_height, const unsigned char* in_png, size_t in_size, bool convert_to_rgba32 = true);

Бен учитель исправляет эту ошибку в следующем уроке для меня. Поэтому попробуйте проверить другие ваши заголовочные файлы и посмотреть, есть ли места, где были удалены точки с запятой.

Надеюсь, это помогло кому-то!

0

Это ошибка синтаксиса. Связана она с отсутствием необходимых разделителей между элементами языка. Компилятор ожидает, что некоторые элементы языка появятся прежде или после других элементов. Если этого не происходит, то он выдаем ошибку. Будем пробовать ее получить. Пишем код:

#include "stdafx.h"
int main(int argc, char* argv[])
{
	int x;
	int y;
	if (x<y) :	// двоеточие здесь совсем не нужно
	{
	}
}

Результат работы компилятора:

D:VСTestErrorTestError.cpp(10) : error C2143: syntax error : missing ';' before ':'

Второй наиболее частый вариант это забыть поставить «;» после объявления класса.

#include "stdafx.h"

class CMy
{
}	// забыли ";"

class CMy2
{
}

int main(int argc, char* argv[])
{
}

Опять та же ошибка.

D:VСTestErrorTestError.cpp(12) : error C2236: unexpected 'class' 'CMy2'
D:VСTestErrorTestError.cpp(12) : error C2143: syntax error : missing ';' before '{'

Еще один вариант с лишней скобки:

#include "stdafx.h"

int main(int argc, char* argv[])
{
}		// это лишнее
return 0;
}

Опять та же ошибка:

D:VСTestErrorTestError.cpp(11) : warning C4508: 'main' : function should return a value; 'void' return type assumed
D:VСTestErrorTestError.cpp(12) : error C2143: syntax error : missing ';' before 'return'

Отсутствие закрывающей скобки может привести к такой же ошибке:

#include "stdafx.h"

int main(int argc, char* argv[])
{
	for (int x=0;x<10;x++		// не хватает ")"
	{
	}
	return 0;
}

Как видите это ошибка связанна с синтаксисом. Если она у Вас появляется внимательно просмотрите код на предмет соответствия требованиям C++ (лишние знаки, забытые ;)

ChA0S_f4me

Почему выдает ошибки?

Ошибки:

Ошибка C2143 синтаксическая ошибка: отсутствие «;» перед «}» 74
Ошибка C2143 синтаксическая ошибка: отсутствие «;» перед «<<» 33
Ошибка C2059 синтаксическая ошибка: } 74
Ошибка C4430 отсутствует спецификатор типа — предполагается int. Примечание. C++ не поддерживает int по умолчанию 33
Ошибка C2238 непредвиденные лексемы перед «;» 33
Ошибка C2365 bankScore::score: переопределение; предыдущим определением было «данные-член» 31

Сам код:

class bankScore
{
    private:
        int score = 100,
            scoreNum = 945794982938456;
        bool setedSum = false,
            editedNum = false,
            closed = false;
    public:
        /*void withdraw(int s)
        {
            if (score - s >= 0)
            {
                score -= s;
                cout << "Деньги успешно сняты";
            }
            else {
                cout << "У вас не хватает денег на счету!";
            }
        };
        void deposit(int s)
        {
            score -= s;
            cout << "Деньги успешно внесены";
        };*/
        void score()
        {
            cout << "На вашем счету " << score << " рублей 00 копеек";
        };
        /*void editScore()
        {
            if (!editedNum)
            {
                cout << "Введите новый номер счета (15 цифр): ";
                cin >> scoreNum;
                cout << "nУспешно!";
                editedNum = true;
            }
        };
        void closeScore()
        {
            if (!closed)
            {
                cout << "Если вы закроете счет, вы больше не сможете им воспользоваться, а так-же заново открыть его. Вы уверенны?n1. Уверен(-а)n2. Отмена";
                int yes = _getch();
                switch (yes)
                {
                case 49:
                    cout << "Счет закрыт. До свидания!";
                case 50:
                    cout << "Закрытие счета отменено!";
                    break;
                }
                closed = true;
            }
        };
        void setScore(int s)
        {
            if (!setedSum)
            {
                cout << "Введите сумму: ";
                cin >> score;
                cout << "nУспешно! Сейчас произведется отчистка" << endl;
                _getch();
                system("cls");
                setedSum = true;
            }
        };*/
};


  • Вопрос задан

    более двух лет назад

  • 307 просмотров

Не уверен по поводу чего большинство ошибок, но у тебя определены переменная и функция с одним именем. А так как они располагаются в одной области имен — это проблема. Вот и ругается Ошибка C2365 bankScore::score: переопределение; предыдущим определением было «данные-член» 31. Просто прочитай и все.

Пригласить эксперта


  • Показать ещё
    Загружается…

09 февр. 2023, в 15:06

2000 руб./за проект

09 февр. 2023, в 15:02

12000 руб./за проект

09 февр. 2023, в 14:22

1500 руб./за проект

Минуточку внимания

Понравилась статья? Поделить с друзьями:
  • Error c2143 syntax error missing before type
  • Error c2143 syntax error missing before constant
  • Error c2131 выражение не определяется константой
  • Error c2131 expression did not evaluate to a constant
  • Error c2110 невозможно добавить два указателя