2009-11-07 70 views
0

這通過變量的情況是:C++:按值

int f(int a){ 
    ... 
    g(a); 
    ... 
} 

void g(int a){...} 

的問題是,編譯器說有呼叫到g中沒有匹配的功能(INT &)。它希望我通過引用傳遞變量,並且g()通過值接收參數。

我該如何解決這個問題?

+1

如果您切換「f」和「g」的定義,會發生什麼情況? – 2009-11-07 18:08:35

+1

你確定這是正確的代碼嗎?函數f返回一個int,但沒有返回語句。 – Tadmas 2009-11-07 18:11:07

+0

你能發佈編譯器錯誤嗎? – Dani 2009-11-07 18:11:20

回答

12

嗯,這裏沒有太多,但第一件事是:確保你有一個g的聲明,它包含在f被定義之前。

void g(int a); 

否則,當你到達f時,函數f不知道函數g是什麼樣的,你會遇到麻煩。從迄今爲止所給出的,這是我能說的最好的。上述f()

+0

是的,是的。如果我聲明g()爲:g(int & a);它可以工作,但那不是我想要做的。 – Gerardo 2009-11-07 18:14:24

+1

@macaco:我認爲你需要發佈更多的代碼,然後你發佈的內容不會引發任何錯誤。 – Lucas 2009-11-07 18:21:12

+0

從給定的代碼+1,這也是我可以猜得到的 – pankajt 2009-11-07 18:29:55

1

你的功能g()需要有兩個錯誤:在使用前

1)G不宣,所以編譯器將compain有關。假設你解決了這個問題,那麼下一個問題是:

2)f不返回一個int。

+2

你的意思是*聲明*。編譯器尋找函數的存在,然後鏈接到實際的實現(*定義*)。 – 2009-11-07 18:33:49

+0

是的,這也會工作,但如果它是簡單的功能更好*定義*它上面 – Ponting 2009-11-07 18:40:04

0

被定義