我看到上述问题(以及类似的问题)在hereherehere的不同地方得到了回答,但是它们都不能解释我的真正追求。

我也看到了关于合格/不合格-id here的很好的解释。
这是我的代码,我正在尝试在struct中定义的静态变量。

#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;
struct  foo {
  static  string name ;
};
string foo::name{"Warrior_Monk"};


int main(){
cout<<"foo::name is "<<foo::name<<endl;

//Chaging the name , and then calling the second name through  a **temp** object which will be created
foo.name ="Great_Warriror_Monk"; // error:expected unqaulified-id before '.' token

//foo::name ="Great_Warriror_Monk";  // THIS IS  THE FIX
foo temp ;
cout<<"foo::name is "<<temp.name<<endl;
cout<<"foo::name is "<<foo::name<<endl;
    return 0 ;
}


现在在main()中,我尝试使用以下命令更改静态变量name失败:

foo.name ="Great_Warriror_Monk";


GCC给我的错误:

error:expected unqaulified-id before '.' token


我知道解决方法是:

foo::name ="Great_Warriror_Monk"


但是我更倾向于理解错误。该错误表明它在unqualified-id标记之前需要一个'.'。根据我对here中不合格ID的理解,结构foo非常适合作为不合格ID。那么这是否意味着错误的措词不正确?

最佳答案

是的,foo是不合格的标识符。但是,重要的是要记住,涉及C ++错误时,错误的文字可能不是实际的问题。在某些情况下,您只需要查看代码行即可了解真正的问题所在。对于GCC来说这是双重的,因为它在看似简单的语法问题上产生钝角错误而闻名。

使用示例的简化形式,both Clang and Visual Studio可以更好地诊断此特定问题。 VS可能只会给您一个通用的“语法错误”,但是至少它特别提到了.,这比GCC提出有关标识符资格的不相关问题更为有用。 Clang(创建更好的C ++错误消息的设计目标之一)只是告诉您问题出在哪里。

如果您要使用C ++,则必须习惯于有时混淆错误消息。

关于c++ - token “。”之前的预期不合格ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59701246/

10-10 12:31