2012-06-18 97 views
-2

例如函數聲明:Visual Studio中沒有看到在某些情況下

void main(){ 
foo1(); 

} 

fooTarget(); 
foo1(foo2();); 
foo2(foo3();); 
foo3(foo4();); 
foo4(foo5();); 
foo5(
foo6(); 
fooTarget(); //Identifier not found 
); 
foo6(
fooTarget(); //It Works! 
); 

是什麼呢? 如果我粘貼fooTarget()來foo5(代碼),它也能工作

一個從實際代碼減少測試用例:

#include <cstring> 

int main() { 
    char word[] = "hey"; 
    int wordSize = getWordLenght(word); // error: getWordLenght not declared 
} 

int getWordLenght(char *word){ 
    return strlen(word); 
} 
+3

我很驚訝,'foo5(foo6(); fooTarget(););'編譯的。我完全不知道這意味着什麼。當我嘗試編譯上面的代碼時,出現了很多錯誤。重新安排它,以便在'main'中使用前的聲明消除了一些,但仍然留下很多關於'語法錯誤,缺少「)」「之前」;「'。 –

+0

我也很驚訝,我可以提供代碼,我有這個麻煩 – mishkapp

+1

我認爲一些真實的代碼,顯示(只)有關你的錯誤將是非常有用的。你在上面發佈了很多錯誤,很難猜測你關心的是什麼。 –

回答

2

在您發佈的註釋中的代碼中,您使用的是尚未聲明的函數。它稍後會聲明,但C++不會在稍後的聲明中解析函數。

此外, '日' 二合字母拼寫 '日',而不是 'HT'

+0

要添加到您可以使用函數原型作爲聲明,如果您想要將實現放在您撥打電話的位置之後(如果需要)。 – Dennis

0
foo5(
foo6(); 
fooTarget(); //Identifier not found 
); 

如果刪除換行符,這會被解析爲:

foo5(foo6(); fooTarget();); 

這當然是不正確的C++代碼。

您在發佈的代碼中有很多其他錯誤。例如,您不指定任何函數原型的返回類型 - 假定它們是用作原型的。

相關問題