2012-08-08 154 views
2

編輯:感謝所有的快速反應,我現在對這個概念有了更好的理解。另外,我會盡量讓我的錯誤消息更加清晰。 編輯:用我最新的代碼更新。錯誤發生在第18行。另外,我開始懷疑我的最新問題是否與原始類本身有關?「非法使用非靜態成員函數」這是什麼?

我想教自己在C + +中的類和對象。我做了一次,只是聲明void函數,在屏幕上輸出一些東西,調用main中的對象,一切正常。

現在,我想擴大這一點,並做一個簡單的補充。不過,我得到的代碼塊一對夫婦的錯誤:

error: invalid use of non-static member function 'int Addition::add(int, int)' 
error: no matching function for call to 'Addition::add()' 

這裏是我的代碼:

#include <iostream> 

using namespace std; 

class Addition { 
public: 
int add (int x, int y) { 
int sum; 
sum=x+y; 
return sum; 
} 
}; 

int main() 
{ 
int num1; 
int num2; 
int ans=addobj.add(num1,num2); 
Addition addobj; 
addobj.add(num1,num2); 
cout<<"Enter the first number you want to add"<<endl; 
cin>>num1; 
cout<<"Enter the second number you want to add"<<endl; 
cin>>num2; 
cout<<"The sum is "<<ans<<endl; 
} 
+0

第一個錯誤不適用於上面的代碼。發佈編譯錯誤時,請確保發佈確切的代碼,確切的錯誤代碼和編譯器投訴的行的指示。 (順便說一句,第一個錯誤信息看起來像你嘗試在'Addition'成員之外的代碼中的某處執行'Addition :: add') – 2012-08-08 16:56:54

回答

10

其中一個最重要的事情,開發者應該學會做的是閱讀編譯器的消息。這是很清楚的:

error: no matching function for call to 'Addition::add()' 

你在你的類功能

int add (int x, int y) 

它需要兩個參數,你傳遞無:

addobj.add(); 

你有2種選擇:

  • 創建和初始化xymain內,並將其作爲參數傳遞
  • 使add不帶參數的創建xyadd的體內,因爲它們的值是由用戶輸入服用。

在這種情況下,作爲函數的名字add,我選擇了第一個選項:

  • 聲明int x, y;裏面你main
  • 閱讀main內的用戶輸入(部分,你在哪裏使用cincout
  • 通過xy作爲參數add像這樣:addobj.add(x, y);
  • 店的結果(如果需要的話),就像這樣:int result = addobj.add(x, y);
+0

嗨Kiril,謝謝你的全面回答,我能夠弄清楚什麼是錯誤的從我原來的問題。但是,我無法讓結果正常工作。我在我的main中創建了一個整數「ans」,並將它設置爲addobj.add(num1,num2)。然後在另一個cout中,我嘗試顯示「int result」。但是,我又遇到了另一個錯誤。試圖找出有什麼不對,但唉沒有發現錯誤。它表示「addobj沒有在範圍內聲明」,指向我將其設置爲等於答案整數的那一行。正如你所看到的,我已經明確指定了Addition addobj。 – Carpetfizz 2012-08-08 17:30:42

+0

@Carpetfizz - 你需要在使用之前定義'addobj'。看着你的編輯,在'int ans = addobj.add(num1,num2);'之前移動'Addition addobj;'行。然後,爲了得到**正確的**結果,首先你必須在將'num1'和'num2'作爲參數傳遞之前初始化'num1'和'num2'。換句話說,在**最後一個'cin'之後移動'int ans = addobj.add(num1,num2);'**行。最後一件事 - addobj.add(num1,num2);'是不必要的 - 你有兩個'add'的調用 - 一個,你存儲結果和這個。刪除這個,留下存儲'ans'的那個。 – 2012-08-08 18:18:37

+1

謝謝你sooo多!!!完美工作!這真是太好了,我會多練習一些課,以便我可以在第一時間完成你所講的事情!再次感謝基里爾,還有其他幫助我的人:) – Carpetfizz 2012-08-09 05:53:12

4

你聲明的方法add(int, int)採用兩個整數作爲參數;當你調用它的時候你必須提供這些參數。這將是很好打印的返回值,以及:

Addition addobj; 
std::cout << addobj.add(1, 2) << std::endl; 
1

add函數有兩個參數,但你有沒有調用它,所以沒有匹配功能可以找到。你必須調用它聲明的函數,即,

addobj.add(1, 2); 
1

你的函數有兩個參數,但你沒有提供它們就調用它。你需要提供你的函數需要的兩個整數參數。爲了有用,你應該保存結果。像這樣的東西

int a = 1; 
int b = 2; 
int result = addjobs.add(a,b); 
+0

非常感謝幫助夥計!現在運行良好:D – Carpetfizz 2012-08-08 17:00:37

相關問題