Error expected unqualified id before int

  • Forum
  • Beginners
  • expected unqualified-id before ‘int’

expected unqualified-id before ‘int’

Slight compile problems. I’m Linux using g++

Here’s what happens in terminal

john@john-laptop:/media/disk/Cannon$ make
g++ -Wall -O2 -c -o Enemy.o Enemy.cpp
Enemy.cpp:10: error: expected unqualified-id before ‘void’
Enemy.cpp:18: error: expected unqualified-id before ‘void’
Enemy.cpp:24: error: expected unqualified-id before ‘int’
Enemy.cpp:29: error: expected unqualified-id before ‘int’

make: *** [Enemy.o] Error 1

Here’s the source code for Enemy.cpp

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
#include "Library.h" // Just std libs and SDL stuff and the H file below

ENEMY::ENEMY(ENEMY* enemy)
{
	setName(enemy->getName());
	setHealth(enemy->getHealth());
	setMoney(enemy->getMoney());
}

ENEMY::void createEnemy(char* name, int health, int money, int damage, int x, int y)
{
	setDamage(damage);
	setMoney(money);
	setHealth(health);
	setName(name);
}

ENEMY::void setPosition(int xPosition, int yPosition)
{
	xPos = xPosition;
	yPos = yPosition;
}

ENEMY::int getX()
{
	return xPos;
}

ENEMY::int getY()
{
	return xPos;
}

Source for Enemy.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Based off of Stats.h

class ENEMY: public STATS
{
	private:
			char damage;
			int armor;
			int xPos;
			int yPos;
	public:
		//ENEMY();
		ENEMY(ENEMY*);
		void createEnemy(char*, int, int, int, int, int);
		void setPosition(int xPosition, int yPosition);
		int getX();
		int getY();
};

and because this is related to stats i’ll throw that in too

Stats.cpp

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
#include "Library.h" // Holds all our libraries

// This is based off Stats.h
// For more documentation see Stats.h

void STATS::setWeapon(char *name)
{
	weapon = name;
}

char* STATS::getWeapon()
{
	return weapon;
}

bool STATS::setName(char* newName)
{
	// If empty string return false
	if (strlen(newName) == 0)
		return false;
	
	// If string is bigger than allocated size (30) return false
	if (strlen(newName) > 32)
		return false;
		
	strcpy(name, newName); // If we get past the above apply name settings
	
	return true;
}

char* STATS::getName()
{
	return name;
}

void STATS::setMoney(int amount)
{
	money = amount;
}

int STATS::getMoney()
{
	return money;
}

void STATS::setHealth(int amount)
{
	health = amount;
}

int STATS::getHealth()
{
	return health;
}

and then there’s

Stats.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// This class is the foundation for both the player & enemies
class STATS
{
	private:
	char name [50]; // A bit more allowing on the allocation
	
	// The rest are self explanatory if you've ever played a game
	int money;
	int health;
	char weapon[30];
	
	public:
	void setWeapon();
	char* getWeapon;
	bool setName(char* newName);
	char* getName();
	void setMoney(int amount);
	int getMoney();
	void setHealth (int amount);
	int getHealth ();
};

Can someone help me solve this, I’ve been on google for about 2 hours now, and I can’t seem to figure this out. I have a feeling it’s the way my classes are setup, but .. I’m not so sure..

Thanks in advance!!

void ENEMY::createEnemy(char* name, int health, int money, int damage, int x, int y)

you always need to write the type of the return value in front of the class name, like you did in Stats.cpp.

Thanks for the help, I see where your going with this, but the problem has gotten a bit worse.

I’ve added the void onto the line. And I still have the above error messages, plus this one

—> Enemy.cpp:3: error: return type specification for constructor invalid

All help is appreciated!

Bump (I hope that’s allowed)

AleaIactaEst wrote:
you always need to write the type of the return value in front of the class name

Always but with the constructor, you can’t specify a return type for it

Enemy.cpp:3: error: return type specification for constructor invalid

This is what the error says

Last edited on

Constructors don’t return values, so do what AleaIactaEst said for every function except the constructor.

Also, I hope that Enemy.cpp somehow includes Enemy.h (it should be including it directly, not relying on
Library.h, if indeed that is gratuitously including it for you).

Topic archived. No new replies allowed.

Хм, тогда вот так

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <windows.h>
 
 
WNDCLASSEX tr;        // Класс окна графиков
PAINTSTRUCT trps;     //структура рисования графиков
HWND hTrWnd;          // Дескриптор окна графиков
HRGN hrgn;
char trClassName[] = "TrClass"; //имя класса окна графиков
 
int TrendWnd_lx, TrendWnd_ly, TrendWnd_rx, TrendWnd_ry;
int sx, sy;
 
HPEN TrendLinePen[8];
for(int i=0; i<8; i++)
{
  TrendLinePen[i]=CreatePen(PS_SOLID, 1, RGB(250/i, i*15, i*30))
}
 
HPEN ZeroLinePen[8]
for(int i=0; i<8; i++)
{
  ZeroLinePen[i]=CreatePen(PS_SOLID, 1, RGB(i, i*2, i*4))
}
 
static HPEN DefaultPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
static HPEN RectanglePen = CreatePen(PS_SOLID, 4, RGB(0, 0, 0));
static HPEN HorisontalLinePen = CreatePen(PS_DOT, 1, RGB(0, 0, 0));
static HPEN VerticalLinePen = CreatePen(PS_DOT, 1, RGB(0, 0, 0));
 
class GRAPH
{
  public:
     GRAPH();
     GRAPH(int ZeroPoint, HPEN Z_Pen, HPEN L_Pen);
     ~GRAPH();
     void SetZeroPoint(int ZeroPoint){zPoint = TrendWnd_ry + ZeroPoint;} //установка 0 графика по Y
     int  GetZeroPoint(void){return zPoint;}                             //получить нулевую точку
     void SetZeroLinePen(HPEN Pen){ZeroLinePen = Pen;}                   //
     void SetLinePen(HPEN Pen){LinePen = Pen;}                           //
     void SetLinePoint(int xL_Point, int yL_Point){xPoint = xL_Point; yPoint = yL_Point;}//
     void StartPoint(void){MoveToEx(hdc, TrendWnd_lx, zPoint, NULL);}    //
     void DrawLine(int xLinePoint, int yLinePoint);                      //
     void PutZeroLine(void);                                             //
  private:
     HPEN ZeroLinePen;
     HPEN LinePen;
     int zPoint;
     int xPoint;
     int yPoint;
};
 
GRAPH::GRAPH()
{
   ZeroLinePen = DefaultPen;
   LinePen = DefaultPen;
   zPoint = 0;
   xPoint = 0;
   yPoint = 0;
}
 
GRAPH::GRAPH(int ZeroPoint, HPEN Z_Pen, HPEN L_Pen)
{
  SetZeroPoint(ZeroPoint);
  ZeroLinePen = Z_Pen;
  yPoint = zPoint;
  LinePen = L_Pen;
}
 
GRAPH::~GRAPH()
{
  delete  ZeroLinePen;
  delete  LinePen;
}
 
void GRAPH::PutZeroLine(void)//рисуем нулевую линию
{
  SelectObject(hdc, ZeroLinePen);
  MoveToEx(hdc, TrendWnd_lx, zPoint, NULL);
  LineTo(hdc, TrendWnd_rx, zPoint);
  SelectObject(hdc, LinePen);
  MoveToEx(hdc, TrendWnd_lx, zPoint, NULL);
}
 
void GRAPH::DrawLine(int xLinePoint, int yLinePoint)
{
   int x, y;
   SelectObject(hdc, LinePen);
   StartPoint();
   for(x=TrendWnd_lx, y=zPoint; x<TrendWnd_rx; x+=10, y+=2)
   {
      LineTo(hdc, x, y);
   }
}

Добавлено через 51 секунду

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
GRAPH* graph[8];
for(int i=0; i<8; i++)
{
  graph[i] = new GRAPH(i*50, DefaultPen, DefaultPen);
}
 
struct trend    //структура для хранения показаний 8 АЦП
{
   char graph1;
   char graph2;
   char graph3;
   char graph4;
   char graph5;
   char graph6;
   char graph7;
   char graph8;
};
 
struct voltage  //структура для хранения установок 3 ШИМ
{
   char vol1;
   char vol2;
   char vol3;
};
//-----------------------------------------------------------------------------------------
 
int InitWindow(int sx, int sy);
ATOM MyRegisterChildClass();
void Marker(LONG x, LONG y, HWND hTrWnd);
LRESULT CALLBACK TrGraphProc(HWND, UINT, WPARAM, LPARAM);
 
 
 
ATOM MyRegisterChildClass()
    {// Заполняем структуру класса окна
       tr.cbSize = sizeof(tr);
       tr.style = CS_HREDRAW | CS_VREDRAW;// Стили класса, в данном случае - окна этого класса будут перерисовываться при изменении размеров по вертикали и горизонтали
       tr.lpfnWndProc = TrGraphProc;// Указатель на функцию, обрабатывающую оконные сообщения
       tr.cbClsExtra = 0;        // Нет дополнительных данных класса 
       tr.cbWndExtra = 0;        // Нет дополнительных данных окна
       tr.hInstance = hInstance; // дескриптор приложения, который регистрирует класс
       tr.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Стандартная иконка
       tr.hCursor = LoadCursor(NULL, IDC_CROSS);   //курсор - перекрестие
       tr.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);// Цвет фона рабочей области окна
       tr.lpszMenuName = NULL;   // Нет меню
       tr.lpszClassName = "TrClass"; // Имя класса окна
       tr.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
       return RegisterClassEx(&tr);
    }
 
//--------------------------------------------------------------------------------------------------------------------------------------------  
    
int InitWindow(int sx, int sy)
{  
   int x, y;
   TrendWnd_lx = 0;
   TrendWnd_ly = 0;
   TrendWnd_rx = sx;
   TrendWnd_ry = -sy;
 
   hbrush = CreateSolidBrush(RGB(255, 255, 255));
   
   SetMapMode(hdc, MM_ISOTROPIC);//текущий режим отображения 
   SetViewportExtEx(hdc, sx, sy, NULL);     //физический размер области экрана в пикселах
   SetWindowExtEx(hdc,  sx, sy, NULL);      //логические размеры окна в пикселах
   
   SelectObject(hdc, hbrush);
   SelectObject(hdc, RectanglePen);
   Rectangle(hdc, TrendWnd_lx, TrendWnd_ly, TrendWnd_rx, TrendWnd_ry);
   for (x = TrendWnd_lx; x < TrendWnd_rx; x += (TrendWnd_rx/10))//чертим вертикальные линии
   {
      SelectObject(hdc, VerticalLinePen);
      MoveToEx(hdc, x, TrendWnd_ly, NULL);
      LineTo(hdc, x, -TrendWnd_ry);
   }
   for (y = TrendWnd_ly; y < -TrendWnd_ry; y += ((-TrendWnd_ry)/10))//чертим горизонтальные линии
   {
      SelectObject(hdc, HorisontalLinePen);
      MoveToEx(hdc, TrendWnd_lx, y, NULL);
      LineTo(hdc, TrendWnd_rx, y);
   }
   SelectObject(hdc, hbrush);
   
   SetWindowExtEx(hdc,  sx, -sy, NULL);      //логические размеры окна в пикселах, ось Y вверх
   ///////////////////////////
   for(int i = 0; i<8; i++)
   {
     graph[i]->DrawLine(400, 444);
   }
   ///////////////////////////
 
}



0



Expected unqualified id errorThe expected unqualified id error shows up due to mistakes in the syntax. As there can be various situations for syntax errors, you’ll need to carefully check your code to correct them. Also, this post points toward some common mistakes that lead to the same error.

Go through this article to get an idea regarding the possible causes and gain access to the solutions to fix the given error.

Contents

  • Why Are You Getting the Expected Unqualified Id Error?
    • – Missing or Misplaced Semicolons
    • – Extra or Missing Curly Braces
    • – String Values Without Quotes
  • How To Fix the Error?
    • – Get Right With Semicolons
    • – Adjust the Curly Braces To Fix the Expected Unqualified Id Error
    • – Wrap the String Values inside Quotes
  • FAQ
    • – What Does a Qualified ID Mean?
    • – What Does the Error: Expected ‘)’ Before ‘;’ Token Inform?
    • – What Do You Mean By Token in C++?
  • Conclusion

Why Are You Getting the Expected Unqualified Id Error?

You are getting the expected unqualified-id error due to the erroneous syntax. Please have a look at the most common causes of the above error.

– Missing or Misplaced Semicolons

You might have placed a semicolon in your code where it wasn’t needed. Also, if your code misses a semicolon, then you’ll get the same error. For example, a semicolon in front of a class name or a return statement without a semicolon will throw the error.

This is the problematic code:

#include <iostream>
using namespace std;
class myClass;
{
private:
string Age;
public:
void setAge(int age1)
{
Age = age1;
}
string getAge()
{
return Age
}
}

Now, if your code contains extra curly braces or you’ve missed a curly bracket, then the stated error will show up.

The following code snippet contains an extra curly bracket:

#include <iostream>
using namespace std;
class myClass;
{
private:
string Age;
public:
void setAge(int age1)
{
Age = age1;
}
}
}

– String Values Without Quotes

Specifying the string values without quotes will throw the stated error.

Here is the code that supports the given statement:

void displayAge()
{
cout << Your age is << getWord() << endl;
}

How To Fix the Error?

You can fix the mentioned unqualified-id error by removing the errors in the syntax. Here are the quick solutions that’ll save your day.

– Get Right With Semicolons

Look for the usage of the semicolons in your code and see if there are any missing semicolons. Next, place the semicolons at their correct positions and remove the extra ones.

Here is the corrected version of the above code with perfectly-placed semicolons:

#include <iostream>
using namespace std;
class myClass
{
private:
string Age;
public:
void setAge(int age1)
{
Age = age1;
}
string getAge()
{
return Age;
}
}

– Adjust the Curly Braces To Fix the Expected Unqualified Id Error

You should match the opening and closing curly braces in your code to ensure the right quantity of brackets. The code should not have an extra or a missing curly bracket.

– Wrap the String Values inside Quotes

You should always place the string values inside quotes to avoid such errors.

This is the code that will work fine:

void displayAge()
{
court << “Your age is” << getWord() << endl;
}

FAQ

You can have a look at the following questions and answers to enhance your knowledge.

– What Does a Qualified ID Mean?

A qualified-id means a qualified identifier that further refers to a program element that is represented by a fully qualified name. The said program element can be a variable, interface, namespace, etc. Note that a fully qualified name is made up of an entire hierarchical path having the global namespace at the beginning.

– What Does the Error: Expected ‘)’ Before ‘;’ Token Inform?

The error: expected ‘)’ before ‘;’ token tells that there is a syntax error in your code. Here, it further elaborates that there is an unnecessary semi-colon before the closing round bracket “).” So, you might get the above error when you terminate the statements that don’t need to be ended by a semi-colon.

– What Do You Mean By Token in C++?

A token is the smallest but important component of a C++ program. The tokens include keywords, punctuators, identifiers, etc. For example, you missed a semi-colon in your code because you considered it something that isn’t very important. But the C++ compiler will instantly show up an error pointing towards the missing “;” token.

Conclusion

The unqualified id error asks for a careful inspection of the code to find out the mistakes. Here are a few tips that’ll help you in resolving the given error:

  • Ensure the correct placement of semicolons
  • Aim to have an even number of curly brackets
  • Don’t forget to place the text inside the quotes

How to fix expected unqualified idNever write the code in hurry, you’ll only end up making more mistakes, and getting such errors.

  • Author
  • Recent Posts

Position is Everything

Position Is Everything: Your Go-To Resource for Learn & Build: CSS,JavaScript,HTML,PHP,C++ and MYSQL.

Position is Everything

Home

  • home
  • articles
  • quick answersQ&A

    • Ask a Question
    • View Unanswered Questions
    • View All Questions
    • View C# questions
    • View Python questions
    • View Javascript questions
    • View C++ questions
    • View Java questions
  • discussionsforums

    • CodeProject.AI Server
    • All Message Boards…
    • Application Lifecycle>
      • Running a Business
      • Sales / Marketing
      • Collaboration / Beta Testing
      • Work Issues
    • Design and Architecture
    • Artificial Intelligence
    • ASP.NET
    • JavaScript
    • Internet of Things
    • C / C++ / MFC>
      • ATL / WTL / STL
      • Managed C++/CLI
    • C#
    • Free Tools
    • Objective-C and Swift
    • Database
    • Hardware & Devices>
      • System Admin
    • Hosting and Servers
    • Java
    • Linux Programming
    • Python
    • .NET (Core and Framework)
    • Android
    • iOS
    • Mobile
    • WPF
    • Visual Basic
    • Web Development
    • Site Bugs / Suggestions
    • Spam and Abuse Watch
  • featuresfeatures

    • Competitions
    • News
    • The Insider Newsletter
    • The Daily Build Newsletter
    • Newsletter archive
    • Surveys
    • CodeProject Stuff
  • communitylounge

    • Who’s Who
    • Most Valuable Professionals
    • The Lounge  
    • The CodeProject Blog
    • Where I Am: Member Photos
    • The Insider News
    • The Weird & The Wonderful
  • help?

    • What is ‘CodeProject’?
    • General FAQ
    • Ask a Question
    • Bugs and Suggestions
    • Article Help Forum
    • About Us
class A {
   public:
      virtual ~A() {};
      virtual int emit(int t, void* a)=0;
};

template <class dest_type="">
class B : public A {
   public:
      typedef int (dest_type::*classpfn)(int, void*);
      B(dest_type* pclass, classpfn pfn) : p(pclass), fn(pfn) {};
      virtual int emit(int t, void* a) { return (p->*fn)(t, a); }
   private:
      dest_type *p;
      classpfn fn;
};

Output:
=======
abc.h:222: error: expected unqualified-id before ‘int’
abc.h:222: error: expected ‘)’ before ‘int’

Comments


1 solution

Solution 1

This part template<class dest_type="">, looks weird to me, are you trying to set the default type dest_type to an empty string?

Try removing that so that you’re left with template<class dest_type>.

Hope this helps,
Fredrik

Comments

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

 

Print

Answers RSS

Top Experts
Last 24hrs This month

CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900

When compiling on a 32-bit/i686 machine using GCC 5.3 with -std=c++11 or -std=c++14, the library fails to compile. It appears this configuration is missing a definition for __m128 (it does not surface with lesser GCC, 64-bit, -std=c++03, etc):

g++ -DDEBUG -g3 -O0 -std=c++14  -fPIC -march=native -pipe -D_GLIBCXX_DEBUG -c seal.cpp
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:41:0,
                 from /usr/include/x86_64-linux-gnu/c++/4.9/bits/opt_random.h:33,
                 from /usr/include/c++/4.9/random:50,
                 from /usr/include/c++/4.9/bits/stl_algo.h:66,
                 from /usr/include/c++/4.9/algorithm:62,
                 from stdcpp.h:13,
                 from cryptlib.h:87,
                 from blake2.cpp:8:
cpu.h:65:1: error: expected unqualified-id before ‘int’
 _mm_extract_epi32 (__m128i a, const int i)
 ^
cpu.h:65:1: error: expected ‘)’ before ‘int’
cpu.h:65:1: error: expected ‘)’ before ‘int’
cpu.h:72:1: error: expected ‘)’ before ‘__builtin_ia32_vec_set_v4si’
 _mm_insert_epi32 (__m128i a, int b, const int i)
 ^
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:43:0,
                 from /usr/include/x86_64-linux-gnu/c++/4.9/bits/opt_random.h:33,
                 from /usr/include/c++/4.9/random:50,
                 from /usr/include/c++/4.9/bits/stl_algo.h:66,
                 from /usr/include/c++/4.9/algorithm:62,
                 from stdcpp.h:13,
                 from cryptlib.h:87,
                 from blake2.cpp:8:
cpu.h:86:1: error: expected ‘)’ before ‘__builtin_ia32_pclmulqdq128’
 _mm_clmulepi64_si128 (__m128i a, __m128i b, const int i)
...

abstract declarator ‘TYPE’ used as declaration[edit | edit source]

  • Message found in GCC version 4.5.1
    • often grouped together with:
      • member ‘DATA_MEMBER’ with constructor not allowed in anonymous aggregate
      • member ‘DATA_MEMBER’ with destructor not allowed in anonymous aggregate
      • member ‘DATA_MEMBER’ with copy assignment operator not allowed in anonymous aggregate
  • a class or struct is missing a name:
struct {  // error, no name
   int bar;
};
  • a header file has a class or struct with a name already used inside ifndef, define statements
#ifndef foo
#define foo
#include <vector>

struct foo {  // error, foo already in use
   std::vector<int> bar;
};

#endif

call of overloaded ‘FUNCTION’ is ambiguous[edit | edit source]

‘VARIABLE’ cannot appear in a constant-expression[edit | edit source]

‘VARIABLE’ cannot be used as a function[edit | edit source]

  • Message found in GCC version 4.5.1
  • make sure the variable name does not have an underscore in it (compiler weirdness)
  • you’re using the same name for a variable name and a function inside a function definition
int foo(int baf) { return baf; }
 
int bar(int foo) {
   foo = foo(4);
   return foo; 
}

conversion from ‘TYPE’ to non-scalar type ‘TYPE’ requested[edit | edit source]

  • Message found in GCC version 4.5.1
  • type conversion error, look for missing «::» syntax or missing parenthesis
  • possibly a casting error
  • a class member function returns a value that does not match the function’s declared return type
class Foo {
public:
   int x;
};
 
class Bar {
public:
   Foo Maz() { return 0; }  // 0 is of type int, not Foo
};

could not convert ‘STATEMENT’ to ‘bool’[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • you a mistyped comparison operator (e.g., using: «=» instead of «==»)
  • you used an incorrect return type for the called function’s definition
// you had: 
foo operator<(const foo & f) const

// instead of:
bool operator<(const foo & f) const
  • you’re using an invalid argument for a conditional statement
string x = "foo";
if (x) cout << "true" << endl;

declaration of ‘FUNCTION’ outside of class is not definition[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • try using ‘=’ to initialize a value instead of parenthesis
  • you used a semicolon or comma between a constructor and an initializer list instead of a colon
  • you left a semicolon before the body of a function definition
class Foo 
{
public:
   int bar;
   Foo(int x);
}; 
 
Foo::Foo(int x);  // semicolon ';' needs to be removed
{
   bar = x;
}

declaration of ‘VARIABLE’ shadows a parameter[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • you’re redefining a variable name that’s already in use, possibly declared in the function’s parameter list
int foo(int bar)
{
   int bar;
   return bar;
}

‘TYPE’ does not name a type[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC version 3.2.3 sometimes reported as: syntax error before ‘CHARACTER’ token
    • in GCC version 4.0.1, sometimes reported as: ISO C++ forbids declaration
      • e.g.: ISO C++ forbids declaration of ‘vector’ with no type
  • you left out an object’s name qualifier or using directive
ostream & os;  // instead of: std::ostream & os;
  • make sure you didn’t mistype the scope operator «::», e.g.: «name:name» instead of «name::name»
  • make sure you included the required libraries
#include <iostream>
// missing vector library include
class Foo {
public:      
   std::vector<int> Bar(std::vector<int> FooBar) { return FooBar; }
};
  • a header file is listed after a file that makes use of it in the include directives
// test.h file
#ifndef TEST_H_
#define TEST_H_
std::string bar;
#endif

// test.cpp file
#include "test.h"
#include <iostream>  // error, needed before test.h
using namespace std;

int main()
{
   cout << bar << endl;
   return 0;
}

expected ‘TOKEN’ before ‘TOKEN’ token[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
    • in GCC version 3.2.3 sometimes reported as: syntax error before ‘CHARACTER’ token
  • check for a missing comma or parenthesis in a function’s parameters
  • check for a missing semicolon
    • e.g.: expected ‘,’ or ‘;’ before ‘TOKEN’
const int MAX = 10  // error

int main() {
   string foo;
   cout << foo.size();
   return 0;
}
  • possibly from a double namespace definition, or a fully-qualified (e.g., std::cout) name already under a ‘using’ directive
  • possible missing ‘<<‘ or ‘>>’ operator in a cin/cout statement
int foo = 0, bar = 0;
cin foo >> bar;  // should be: cin >> foo >> bar;

expected primary-expression before ‘TOKEN’[edit | edit source]

expected primary-expression before ‘int’
  • Message found in GCC version 4.5.1
    • in GCC version 3.2.3 reported as: parse error before ‘)’ token
  • one likely cause is using (or leaving in) a type name in a function call
int sum(int x, int y) { return (x + y); }

int main() {
   int a = 4, b = 5;
   sum(a, int b); // int is the problem causer
   return 0;
}

expected unqualified-id before[edit | edit source]

  • Message found in GCC version 4.5.1
  • check your syntax for missing, misplaced, or erroneous characters
  • expected unqualified-id before ‘(‘ token
    • e.g.: parentheses in a class name
class Foo() {
public:
   int x;
};
  • expected unqualified-id before ‘return’
    • e.g.: missing opening brace in a conditional statement
int foo = 3, bar = 2;
if (foo > bar)  // error, no "{"
   cout << foo << endl;
}

incompatible types in assignment of ‘TYPE’ to ‘TYPE’[edit | edit source]

  • Message found in GCC versions 4.5.1
  • you’re trying to assign to or initialize a character array using a character pointer
    • e.g.: incompatible types in assignment of ‘const char*’ to ‘char [10]’
char bar[10];
const char *foo = "ppp";
bar = *foo;  // error

// possible fix, use strcpy from the cstring header:
char bar[10];
const char *foo = "ppp";
strcpy(bar, foo);
  • improperly accessing elements of a 2D array
char foo[2][3];
foo[1] = ' '; // error, need both dimensions, eg: foo[1][0] = ' ';

invalid conversion from ‘TYPE’ to ‘TYPE’[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • make sure parentheses were not left out of a function name
  • make sure you are passing a function the correct arguments
char foo = 'f';
char bar[] = "bar";
if (strcmp(foo, bar) != 0)
   cout << "Correct answer!";
// strcmp was expecting 2 character pointers, foo doesn't qualify

invalid operands of types ‘TYPE’ and ‘TYPE’ to binary ‘FUNCTION’[edit | edit source]

  • Message found in GCC version 4.5.1
  • You’re trying to concatenate to C string arguments with the addition operator
// attempting to combine two C-strings
cout << "abc" + "def";

// possible fix: convert 1 argument to a string type
cout << "abc" + string("def");

invalid use of template-name[edit | edit source]

invalid use of template-name ‘TEMPLATE’ without an argument list
  • Message found in GCC version 4.5.1
    • often paired with: expected unqualified-id before ‘TOKEN’
    • in GCC version 3.2.3 reported as: syntax error before ‘CHARACTER’ token
  • the type is missing after the class name in a function definition
template <class T> class Foo {
private:
   int x;
public:
   Foo();
};

template<class T> Foo::Foo() { x = 0; }  // error, should be: Foo<T>::Foo()

is not a member of[edit | edit source]

  • Message found in GCC versions 4.5.1
  • check for a missing header include
example: ‘cout’ is not a member of ‘std’
// test.cpp
// file is missing iostream include directive
int main() {
   std::cout << "hello, world!n";
   return 0;
}

‘TYPE’ is not a type[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC version 3.2.3 reported as: type specifier omitted for parameter ‘PARAMETER’
  • you mistyped a template parameter in a function declaration
void foo(int x, vector y);
  • an included header file does not have the correct libraries included in the source file to implement it:
    • e.g.: you’re using #include «bar.h» without including the «foo.h» that «bar.h» needs to work
  • Check that there are no methods with the same name as ‘TYPE’.

‘CLASS_MEMBER’ is private within this context[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • usually reported in the format:
    • (LOCATION_OF_PRIVATE_DATA_MEMBER) error: ‘DATA_MEMBER’ is private
    • (LOCATION_OF_CODE_ACCESSING_PRIVATE_DATA) error: within this context
  • Message usually results from trying to access a private data member of a class or struct outside that class’s or struct’s definition
  • Make sure a friend member function name is not misspelled
class FooBar {
private: int bar;
public: friend void foo(FooBar & f);
};
void fooo(FooBar & f) {  // error
   f.bar = 0;
}
  • make sure a read only function is using a ‘const’ argument type for the class
  • make sure functions that alter data members are not const
  • check for derived class constructors implicitly accessing private members of base classes
class Foo {
private: Foo() {}
public: Foo(int Num) {}
};
class Bar : public Foo {
public: Bar() {}
// Bar() implicitly accesses Foo's private constructor
};
solution 1: use an initializer list to bypass implicit initialization
solution 2: make the accessed base class member protected instead of private
  • You’re trying to initialize a contained class member by accessing private data
class Foo {
private: char mrStr[5];
public: Foo(const char *s = "blah") { strcpy(mrStr, s); }
};

class Bar {
private:
   int mrNum;
   Foo aFoo;
public:
   Bar(int n, const Foo &f);
};

// error, attempting to use the Foo class constructor by accessing private data:
Bar::Bar(int n, const Foo &f) : aFoo(f.mrStr) {  // mrStr is private
   mrNum = n;
}

possible fix, assign the whole object rather than part of it:

Bar::Bar(int n, const Foo &f) : aFoo(f) {
   mrNum = n;
}

ISO C++ forbids declaration of ‘FUNCTION’ with no type[edit | edit source]

  • Message found in GCC version 3.2.3, 4.5.1
  • you’ve created a function with no listed return type
Foo() { return 0: }
// should be: int Foo() { return 0: }

multiple definitions of[edit | edit source]

eg: multiple definition of `main’
  • Message found in GCC version 4.5.1
  • check for missing inclusion guard in header file
  • check for duplicate file listing in compile commands / makefile
    • e.g.: g++ -o foo foo.cpp foo.cpp
  • check for definitions rather than only declarations in the header file

‘CLASS FUNCTION(ARGUMENTS)’ must have an argument of class or enumerated type[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • you’re attempting to access members of a class with a non-member function
    • non-member functions must access class members explicitly
eg: CLASS_NAME FUNCTION_NAME(CLASS_NAME OBJECT_NAME, ARGUMENTS)
  • you’re redefining an operator for a standard (built-in) type
class Foo {
public:
   friend int operator+(int x, int y);
};

new types may not be defined in a return type[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC version 3.2.3, reported as:
semicolon missing after definition of ‘CLASS’
ISO C++ forbids defining types within return type
  • check for a missing semicolon at the end of a class definition
class Foo {
public:
   int x;
}  // Error

no match for call to ‘FUNCTION’[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • make sure the function’s namespace is used ( using namespace std / std::function() )
  • make sure the function name is not misspelled, parentheses aren’t missing
  • make sure the function is called with the correct arguments / types / class
  • if you’re initializing a variable via parentheses, if there’s underscores in the variable name try removing them. Sometimes an equals sign is the only way…
  • you’re using the same name for a variable and a function within the same namespace
string bar() {
   string foo = "blah";
   return foo;
}

int main() {
   string bar;
   bar = bar();  // error, "bar()" was hidden by string initialization
   return 0;
}

no matching function for call to ‘FUNCTION’[edit | edit source]

  • Message found in GCC version 4.5.1
  • make sure there aren’t parentheses where there shouldn’t be (e.g.: classname::value() instead of classname::value )
  • you’re using a string argument with a function that expects a C-string
// broken code
ifstream in;
string MrString = "file.txt";
in.open(MrString);

// solution: convert the string to a C-string
ifstream in;
string MrString = "file.txt";
in.open(MrString.c_str());

non-constant ‘VARIABLE’ cannot be used as template argument[edit | edit source]

  • Message found in GCC version 3.2.3
    • in GCC version 4.5.1 reported as: ‘VARIABLE’ cannot appear in a constant-expression
  • variable used for a template argument, which are required to be constant at compile time
template <class T, int num>
class Bar {
private:
   T Foo[num];
};

int main() {
   int woz = 8;
   Bar<double, woz> Zed;  // error, woz is not a constant
   return 0;
}

non-member function ‘FUNCTION’ cannot have cv-qualifier[edit | edit source]

error: non-member function ‘int Foo()’ cannot have cv-qualifier

cv = constant / volatile
  • Message found in GCC version 4.5.1
  • you’re using the ‘post’ const (constant value) on a non-member function
  • you’re not using the scope qualifier («TYPENAME::») in the function definition
  • you mistyped the definition for a template class’s member function
template<class Type>
class Foo {
private:
   int stuff;
public:
   int bar() const;
};

template<class Type>
int Foo::bar() const {  // error
   return stuff;
}

possible fix:

template<class Type>
int Foo<Type>::bar() const {
   return stuff;
}

passing ‘const OBJECT’ as ‘this’ argument of ‘FUNCTION’ discards qualifiers[edit | edit source]

  • Message found in GCC version 4.5.1
  • you’re returning an address
  • you’re attempting to access a container element with a const_iterator using a member function that has no non-const versions. The non-const function does not guarantee it will not alter the data

request for member ‘NAME’ in ‘NAME’, which is of non-class type ‘CLASS’[edit | edit source]

  • Message found in GCC versions 4.5.1
    • in GCC version 3.2.3 reported as:
request for member ‘NAME’ in ‘NAME’, which is of non-aggregate type ‘TYPE’
  • check the function call in the code, it might be calling a function with incorrect arguments or it might have misplaced/missing parenthesis
  • your using the «*this» pointer where you should just be using the functions name
  • e.g., use: return mem_func(); instead of: return *this.mem_func();
  • using the «*this» pointer with the wrong syntax
class Foo {
public:
   int x;
   Foo(int num = 0) { x = num; }
   void newX(int num);
};

void Foo::newX(int num) {
   *this.newX(num);  // error, need (*this).newX or this->newX
}

statement cannot resolve address of overloaded function[edit | edit source]

  • Message found in GCC versions 3.2.3, 4.5.1
  • make sure you’re not forgetting the parenthesis after a member function name
class Foo {
public:
   int Bar() { return 0; }
};

int main() {
   Foo x;
   x.Bar;  // error
   return 0;
}

two or more data types in declaration of ‘NAME’[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC version 3.2.3 reported as: extraneous ‘TYPE’ ignored
  • you have multiple data types listed for a function declaration’s return value
int char sum(int x, int y);  // int char
  • possibly a missing semicolon in between 2 type declarations
    • usually missing in a function, struct, or class declaration after the curly braces {}

<GOBBLEDEGOOK> undefined reference to <GOBBLEDEGOOK>[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC versions 4.0.1, 4.2.1 reported as: Undefined symbols
  • check for a missing or mistyped header includes
  • check for a missing or mistyped files/libraries in a project/make file
  • check for a missing, mistyped, or undefined functions or class constructors
// header file
void foo();
void bar();
void baz();

// implementation file, bar definition is missing
void foo() { cout << "foon"; }
void baz() { cout << "bazn"; }
  • check for function declarations that do not match their definitions
  • make sure function names do not overlap those in existing header files
  • make sure compile commands syntax / makefile structure is correct (e.g.: g++ -o file.cc … etc.)
  • no main() function is defined in any of the files inside a project/makefile
    • e.g.: undefined reference to `WinMain@16′

‘NAME’ was not declared in this scope[edit | edit source]

  • Message found in GCC version 4.5.1
    • in GCC versions 3.2.3 reported as: ‘FUNCTION’ undeclared (first use of this function)
  • look for a misspelled or changed variable/function/header call name
lonh wait;

// instead of:
long wait;
  • make sure the proper header and library files are included
    • defined variables may need the headers they utilize included in all files that use the defined variables

Hi all ,

I’m trying to build NVIDIA’s SceniX 7.3 Viewer with Qt 5.7 while it was originally written to support Qt 4.7. All main source files were compiled successfully when the build stopped at moc_ColorPickerWidget.cpp :
screenshot1: https://www.imageupload.co.uk/image/BP8N
screenshot2: https://www.imageupload.co.uk/image/BP8s

here’s corresponding part of ColorPickerWidget.h:

// =====================================================

class ColorPickerRegion : public SceniXQGLWidget
{
  Q_OBJECT

public:
  ColorPickerRegion(QWidget *parent, const nvgl::RenderContextGLFormat &format, SceniXQGLWidget *shareWidget);

public slots:
  void setColor(int hue, int sat, int val, int red, int green, int blue);
  void setAxisHue(bool checked);
  void setAxisSat(bool checked);
  void setAxisVal(bool checked);
  void setAxisRed(bool checked);
  void setAxisGreen(bool checked);
  void setAxisBlue(bool checked);

signals:
  void colorChanged(int hue, int sat, int val, int red, int green, int blue);

protected:
  virtual void initializeGL();
  virtual void paintGL();
  virtual void resizeGL(int width, int height);
  
  virtual void mouseMoveEvent(QMouseEvent *event);
  virtual void mousePressEvent(QMouseEvent *event);

  void updateColor(float x, float y);

private:
  void renderQuad(const nvmath::Vec3f colors[4]);
  void renderCrossHair(float x, float y, const nvmath::Vec3f colors[4]);

  int m_hue;
  int m_sat;
  int m_val;
  int m_red;
  int m_green;
  int m_blue;
  ColorPickerAxis m_axis;
};


// =====================================================

Please notice that Qt Creator doesn’t highlight known types — uint, QMetaType::Void etc.

As I don’t have much experience with Qt could someone, please, tell me what’s wrong there ?

Thanks

Понравилась статья? Поделить с друзьями:
  • Error expected to return a value at the end of arrow function consistent return
  • Error expected string or bytes like object
  • Error expected specifier qualifier list before static
  • Error expected property shorthand object shorthand
  • Error expected primary expression before unsigned