Вопрос

Я пытаюсь скомпилировать следующий код на C++

string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}

Там, где написано «Здесь произошла ошибка», при компиляции я получаю следующую ошибку:"Ошибка:Нет совпадения для вызова '(std::string) ()'.Как я могу это решить?

Это было полезно?

Решение

Не давайте строке и функции одинаковые имена, и ошибка исчезнет.

Компилятор «забыл», что существует функция с таким именем, когда вы объявляете локальную переменную с таким же именем.

Другие советы

Локальная переменная затеняет имя глобальной функции.Лучше всего переименовать локальную переменную, но есть также оператор области, который позволяет вам получить доступ к глобальному имени:

initialDecision = ::initialDecision();

В C++ это называется «скрытием имени».В этом конкретном примере вы объявляете локальную переменную, которая имеет то же имя, что и функция в области пространства имен.После точки объявления этой переменной функция становится скрытый, и каждый раз, когда вы упоминаете имя «initialDecision», компилятор справедливо предполагает, что вы ссылаетесь на переменную.Поскольку вы не можете применить оператор вызова функции «()» к переменной типа «строка», компилятор выдает сообщение об ошибке.

Во многих случаях для ссылки на скрытые имена можно использовать оператор разрешения области '::'.См., например, ответ UncleBens.

Попробуйте переименовать переменную, чтобы она не совпадала с именем функции.

Проблема в том, что вы повторяете имя InitialDecision как переменную, так и функцию.Это сильно запутывает компилятор.Попробуйте переименовать переменную во что-нибудь другое;тогда это сработает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top