2010-06-03 90 views
0

這是我的代碼:調試錯誤:最大必須有工會類結構類型

#include <iostream> 
using namespace std; 
class Sp 
{ 
private : 
    int a; 
    int b; 
public: 
    Sp(int x = 0,int y = 0) : a(x), b(y) { }; 

    int max(int x,int y); 
}; 

int Sp::max(int a,int b) { return (a > b ? a : b); }; 

int main() 
{  
    int q,q1; 
    cin >> q >>q1; 
    Sp *mm = new Sp(q,q1); 
    cout << mm.max(q,q1); 
    return 0; 
} 
+1

從流中提取時,需要在提取之後測試流狀態(例如'if(!cin){/ *進行錯誤處理* /}')以確保提取成功完成。如果提取失敗,對象中的值將保持不變(在這種情況下,這意味着對象「q」或「q1」將被初始化)。 – 2010-06-03 01:52:29

+2

不要在不需要時動態分配。你正在泄漏記憶,也是一個小例子。另外,爲什麼不包括''並使用'std :: max'? – GManNickG 2010-06-03 02:00:42

回答

1

相反的:mm.max(q,q1);
你需要使用:mm->max(q,q1);
毫米是一個指針,需要這樣加以解決。

或者,你可以只說:

Sp mm(q,q1); 
cout<< mm.max(q,q1); 

,避免指針一起。

+0

謝謝你,我想我的眼睛瞎了! – hcemp 2010-06-03 01:50:36

1

mm是一個指向Sp;你需要使用->,不.

cout << mm->max(q,q1); 

然而,這是沒有意義的動態反正創建Sp對象;爲什麼不乾脆:

Sp mm(q, q1); 
cout << mm.max(q, q1); 

因爲它是現在寫使用動態分配的,你不破壞您通過使用delete,這是所有到常見的編程錯誤創建的對象。

相關問題