C ++错误:预期的unqualified-id

时间:2012-04-13 04:31:38

标签: c++

我收到错误“错误:在第6行'{'令牌”之前预计会出现unqualified-id。

我不知道出了什么问题。

#include <iostream>

using namespace std;

class WordGame;
{
public:

    void setWord( string word )
    {
        theWord = word;
    }
    string getWord()
    {
        return theWord;
    }
    void displayWord()
    {
        cout << "Your word is " << getWord() << endl;
    }
private:
    string theWord;
}


int main()
{
    string aWord;
    WordGame theGame;
    cin >> aWord;
    theGame.setWord(aWord);
    theGame.displaymessage();

}

6 个答案:

答案 0 :(得分:23)

此处不应有分号:

class WordGame;

...但是在课程定义的最后应该有一个:

...
private:
    string theWord;
}; // <-- Semicolon should be at the end of your class definition

答案 1 :(得分:8)

作为旁注,请考虑将setWord()中的字符串作为const引用传递,以避免过多的复制。另外,在displayWord中,考虑使这个const函数遵循const-correctness。

void setWord(const std::string& word) {
  theWord = word;
}

答案 2 :(得分:7)

WordGame之后删除分号。

当班级规模小得多时你真的应该发现这个问题。当你编写代码时,你应该在每次添加六行时进行编译。

答案 3 :(得分:3)

分号应该在类定义的末尾而不是名称后面:

class WordGame
{
};

答案 4 :(得分:0)

就其价值而言,我遇到了同样的问题,但这并不是因为多余的分号,而是因为我在上一个声明中忘记了分号。

我的情况类似于

mynamespace::MyObject otherObject

for (const auto& element: otherObject.myVector) {
  // execute arbitrary code on element
  //...
  //...
} 

从这段代码中,我的编译器一直告诉我:

error: expected unqualified-id before for (const auto& element: otherObject.myVector) { etc... 我本来是指我将for循环弄错了。不!我只是在声明;之后忘记了otherObject

答案 5 :(得分:0)

对于有这种情况的任何人:当我不小心使用my_first_scope::my_second_scope::true代替简单的true时,我看到了这个错误,就像这样:

bool my_var = my_first_scope::my_second_scope::true;

代替:

bool my_var = true;

这是因为我有一个宏,导致MY_MACRO(true)错误地扩展为my_first_scope::my_second_scope::true,而我实际上是在调用bool my_var = MY_MACRO(true);

以下是这种范围错误的快速演示:

程序(您可以在此处在线运行:https://onlinegdb.com/BkhFBoqUw):

#include <iostream>
#include <cstdio>

namespace my_first_scope 
{
namespace my_second_scope
{
} // namespace my_second_scope
} // namespace my_first_scope

int main()
{
    printf("Hello World\n");
    
    bool my_var = my_first_scope::my_second_scope::true;
    
    std::cout << my_var << std::endl;

    return 0;
}

输出(构建错误):

main.cpp: In function ‘int main()’:
main.cpp:27:52: error: expected unqualified-id before ‘true’
     bool my_var = my_first_scope::my_second_scope::true;
                                                    ^~~~

请注意错误:error: expected unqualified-id before ‘true’,以及错误下方的箭头所指向的位置。 显然,在我的案例中,“不合格ID” 是我在::之前的双冒号(true)范围运算符。

当我添加宏并使用它时(在此处运行此新代码:https://onlinegdb.com/H1eevs58D):

#define MY_MACRO(input) my_first_scope::my_second_scope::input

...

bool my_var = MY_MACRO(true);

我收到这个新错误:

main.cpp: In function ‘int main()’:
main.cpp:29:28: error: expected unqualified-id before ‘true’
     bool my_var = MY_MACRO(true);
                            ^
main.cpp:16:58: note: in definition of macro ‘MY_MACRO’
 #define MY_MACRO(input) my_first_scope::my_second_scope::input
                                                          ^~~~~