调试错误:最大必须有工会类结构类型
问题描述:
这是我的代码:调试错误:最大必须有工会类结构类型
#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;
}
答
相反的: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
答
mm
是一个指向Sp
;你需要使用->
,不.
:
cout << mm->max(q,q1);
然而,这是没有意义的动态反正创建Sp
对象;为什么不干脆:
Sp mm(q, q1);
cout << mm.max(q, q1);
因为它是现在写使用动态分配的,你不破坏您通过使用delete
,这是所有到常见的编程错误创建的对象。
从流中提取时,需要在提取之后测试流状态(例如'if(!cin){/ *进行错误处理* /}')以确保提取成功完成。如果提取失败,对象中的值将保持不变(在这种情况下,这意味着对象“q”或“q1”将被初始化)。 – 2010-06-03 01:52:29
不要在不需要时动态分配。你正在泄漏记忆,也是一个小例子。另外,为什么不包括''并使用'std :: max'? –
GManNickG
2010-06-03 02:00:42