诡异的编译不通过,求助啊!!
下面一段代码,在WINDOWS下用VC6.0能编过,在SUSE11下用G++为什么就编译不过哈?求神牛解释哈!
#include <iostream>
class A
{
public:
A()
{
printf("Fun 1\n");
data = 0;
}
A(int d)
{
printf("Fun 2\n");
data = d;
}
A(A& a)
{
printf("Fun 3\n");
data = a.data;
}
A &operator=(A& a)
{
data = a.data;
//return *this;
}
A operator-(A& a)
{
A aa;
aa.data = data - a.data;
return aa;
}
//private:
int data;
};
int main()
{
A a(0), b(100), c(200);
c = a - b;
printf("a.data = %d\n", a.data);
printf("b.data = %d\n", b.data);
printf("c.data = %d\n", c.data);
return 0;
}
[解决办法]
你从没有使用iostream,你#include <iostream>干啥
你使用了printf,那么你应该#include <stdio.h> 和 <stdlib.h>
A &operator=(A& a)
{
data = a.data;
//return
}
要修改为:
A& operator=(const A& a)
{
data = a.data;
return *this;
}
按照以上3处修改后,顺利在g++下编译通过(x86_64 fedora16)
[解决办法]
这是因为VC++6.0兼容C和C++,而G++只是编译标准C++,你的程序中使用的printf是C中的输出函数,包含在stdio.h即标准输入输出头文件中,而你所导入的iostream头文件是C++中的io头文件。
解决办法:1.把所有的printf改成cout用g++编译
或者 2.把头文件改成stdio.h用gcc编译。
希望对你用帮助。