gpt4 book ai didi

c++ - “.” token 之前的预期不合格 ID

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:35 25 4
gpt4 key购买 nike

我看到上面的问题(和类似的问题)在不同的地方得到了回答 here , herehere ,但他们都没有解释我真正追求的是什么。

我还看到了关于 qualified/Un-qualified -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 的理解, struct 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com