Ошибка С++:Нет совпадения для вызова
Вопрос
Я пытаюсь скомпилировать следующий код на 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 как переменную, так и функцию.Это сильно запутывает компилятор.Попробуйте переименовать переменную во что-нибудь другое;тогда это сработает.