2013-09-22 94 views
-2

有誰知道爲什麼:C++代碼問題

io.cpp:

# include <iostream> 
int ReadNumber() 
{ 
    using namespace std; 
    cout << "Enter a number: "; 
    int x; 
    cin >> x; 
    return x; 
} 

void WriteAnswer(int x) 
{ 
    using namespace std; 
    cout << "The answer is " << x << endl; 
} 

main.cpp中:

int ReadNumber(); 
void WriteAnswer(int x); 

int main() 
{ 
    int x = ReadNumber(); 
    int y = ReadNumber(); 
    WriteAnswer(x+y); 
    return 0; 
} 

沒有INT X在Readnumber(); main.cpp中的前向聲明?當我把int x放到括號中時,編譯器說:''函數不帶0參數''

+1

這類問題上堆棧溢出屬於,不在這裏......是程序員只有理論和概念問題,而不是問題爲什麼代碼不起作用...我建議你閱讀本頁http://programmers.stackexchange.com/help/on-topic –

+0

int readNumber();'聲明在'main.cpp'中必須與'io.cpp'中的定義相匹配。你的問題不夠明確或不夠明白。它是否與範圍界定有關? 'main()'中的'int x'本地與'ReadNumber()'中的'int x'本地沒有關係。 –

+0

你使用什麼編譯器?這段代碼在剛剛粘貼到Visual Studio 2012中新創建的項目中時工作得很好。 – mabako

回答

0

Readnumber()中沒有int x。 main.cpp中的前向聲明?

ReadNumber()不帶任何參數,所以沒有在前面的聲明或定義中指定哪個匹配。該定義確實包含一個本地變量,int x,但不存在定義該函數的塊({ .... })之外。它與代碼中使用的其他int x不同。這是可以的,因爲它們都不在範圍

WriteAnswer()採用一個參數,一個int,因此原型爲:

void WriteAnswer(int x); 

的 'x' 是在一個聲明(即,可以寫成void WriteAnswer(int);)實際上是多餘的。定義中需要一個標識符(例如x),因爲在沒有定義的情況下,參數不能用於定義。

因此,這裏有一些術語來查找:

  • 範圍
  • 局部變量
  • 標識