Ожидаемый неквалифицированный идентификатор перед «.» знак - PullRequest
0 голосов
/ 12 января 2020

Я вижу, что на вышеуказанный вопрос (и подобные вопросы) отвечают в разных местах здесь , здесь и здесь , но ни один из них не объясняет, что я действительно после.

Я также видел очень хорошее объяснение квалифицированного / неквалифицированного -id здесь . Вот мой код, я экспериментирую с переменными stati c, определенными в 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 () я безуспешно пытался изменить переменную stati c name с помощью команды:

foo.name ="Great_Warriror_Monk";

, для которой G CC дал мне ошибку:

error:expected unqaulified-id before '.' token

Я знаю, что исправление:

foo::name ="Great_Warriror_Monk"

Но Я более склонен к пониманию ошибки. Ошибка говорит о том, что ожидалось unqualified-id до '.' токена. Из моего понимания неквалифицированного идентификатора из здесь , структура foo хорошо квалифицируется как неквалифицированный идентификатор. Значит ли это, что ошибка неверна с ее формулировками?

1 Ответ

2 голосов
/ 12 января 2020

Да, foo - это неквалифицированный идентификатор. Тем не менее, важно помнить, что когда речь идет об ошибках C ++, текст ошибки может не являться реальной проблемой. В некоторых случаях вам просто нужно взглянуть на строку кода, чтобы увидеть, в чем заключается настоящая проблема. Это вдвойне верно для G CC, который хорошо известен тем, что выдает тупые ошибки при кажущихся простыми проблемах syntacti c.

Используя упрощенную форму вашего примера, и Clang, и Visual Studio лучше диагностируйте эту проблему. VS может только дать вам обобщенную c «синтаксическую ошибку», но, по крайней мере, конкретно упоминает ., что более полезно, чем G CC, поднимая не относящиеся к делу вопросы о квалификации идентификатора. Clang (одна из целей разработки которого состоит в создании более совершенных сообщений об ошибках C ++) просто говорит вам, в чем проблема.

Если вы собираетесь использовать C ++, вам придется привыкнуть к иногда тупые сообщения об ошибках.

...