2009-10-10 28 views
0

我試圖編譯下面的代碼在C++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)()」。我怎樣才能解決這個問題?

回答

14

不要給你的字符串和你功能相同的名稱,並且錯誤將消失。

當您聲明具有相同名稱的局部變量時,編譯器「忘記」存在具有該名稱的函數。

1

嘗試重命名變量不匹配函數的名稱。

1

問題是你重複名稱initialDecision作爲變量和函數。這大大地混淆了編譯器。嘗試將該變量重命名爲其他內容;它會工作。

4

局部變量隱藏全局函數的名稱。最好是重新命名局部變量,但也有它可以讓你明確訪問全局名稱範圍操作:

initialDecision = ::initialDecision(); 
3

這就是所謂的「名字隱藏」在C++中。在這個特定的例子中,你聲明瞭一個局部變量,它與名字空間範圍中的一個函數具有相同的名稱。在聲明該變量後,該函數變爲隱藏,並且每次提到'initialDecision'名稱時,編譯器都會正確地假定您指的是變量。由於您不能將函數調用操作符'()'應用於'string'類型的變量,因此編譯器會發出錯誤消息。

在很多情況下,爲了引用隱藏名稱,您可以使用範圍解析運算符'::'。例如,請參閱UncleBens響應。