首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

诡异的编译不通过,

2012-06-25 
诡异的编译不通过,求助啊!!下面一段代码,在WINDOWS下用VC6.0能编过,在SUSE11下用G++为什么就编译不过哈?求

诡异的编译不通过,求助啊!!
下面一段代码,在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编译。
希望对你用帮助。

热点排行