2010-06-03 58 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,这是所有到常见的编程错误创建的对象。

相关问题