如何修复C++错误:应为未限定的ID

wqlqzqxt  于 2022-11-27  发布在  其他
关注(0)|答案(7)|浏览(436)

我在第6行看到这个错误:

error: expected unqualified-id before '{' token

我看不出哪里不对劲。

#include <iostream>

using namespace std;

class WordGame;
{               // <== error is here on line 6
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();

}
hts6caw3

hts6caw31#

此处不应有分号:

class WordGame;

...但在类定义的末尾应该有一个:

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

bvk5enib2#

顺便说一句,考虑在setWord()中将字符串作为const引用传递,以避免过多的复制。另外,在displayWord中,考虑将其作为const函数,以遵循const-correction。

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

yjghlzjz3#

去掉WordGame后面的分号。
你应该在类还小的时候就发现这个问题了,当你写代码的时候,你应该在每次添加半打代码行的时候都在编译。

k5ifujac

k5ifujac4#

分号应该在类别定义的结尾,而不是在名称之后:

class WordGame
{
};
bn31dyow

bn31dyow5#

不管怎么说,我也遇到了同样的问题,但这不是因为一个额外的分号,而是因为我忘记了前一个语句中的分号。
我的情况是

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后忘记了;

7uhlpewt

7uhlpewt6#

对于这种情况的任何人:当我不小心用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’,以及错误下面的箭头指向的位置。显然,在我的例子中,“unqualified-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
                                                          ^~~~~
ddrv8njm

ddrv8njm7#

我得到这个错误是因为我没有声明一个变量,而是在进一步使用它。下面是我得到它的原因代码。
这是因为我没有声明一个变量来表示我的〉向量的大小。

int n=arr.size();

替换此处,

int sumSubarrayMins(vector<int>& arr) {
        
        
        int = arr.size();
        long long sum;
        long long ans =0;
        for(long i =0;i<n;i++){
            
             sum =0;
            long mini=INT_MAX;
            for(long long j =i;j<n;j++){
                mini=min(mini,arr[j]);
                sum+=mini;
            }
            ans+=sum;
           

        }
        return ans;
    }

相关问题