我看到上述问题(以及类似的问题)在here,here和here的不同地方得到了回答,但是它们都不能解释我的真正追求。
我也看到了关于合格/不合格-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/