2013-07-01 84 views
0

我有兩個函數,簽名如下。函數重載模糊C++

void overloading(int, int) 

void overloading(int, A *ptr, int) 

其中A是一個類。

當我在gcc 3.4編譯。我的主要功能有以下調用。

A *pointer = new A(); 

overloading(10, pointer,20); 

我得到它說

"Invalid conversion from A * to int" 

錯誤我是不是做錯了什麼或編譯器無法識別正確的重載函數?

+4

請發佈真實的代碼 - 這應該工作。你的問題可能在別的地方。 –

+0

你能發佈一個能夠再現問題的最小代碼示例嗎?順便說一句,這是一個嚴重的舊編譯器,人們可能很難重現這個問題。 – juanchopanza

+0

第二個定義原型沒有被包含在聲明不正確參數的代碼中? – WhozCraig

回答

2

您的問題是,在您可能撥打overloading的位置,您尚未聲明函數的三個參數版本,因此編譯器只能看到(int, int)版本。你甚至可以通過預處理源文件來證明這一點(例如g++ -E)。

只要確保在主文件中包含所有需要的標題。

+0

+1我不支持這個答案,因爲我在一般章節發表評論。我高度懷疑這是準確的。 – WhozCraig