LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 976|回复: 8

请教一个VC程序

[复制链接]
发表于 2004-5-22 17:38:40 | 显示全部楼层 |阅读模式
不好意思!
请教VC程序,是MSDN中的代码。#include <iostream>
#include <functional>
//#include <afx.h>
using namespace std ;

class MathOps : public plus<int>, public minus<int>,
                 public multiplies<int>, public divides<int>,
                 public modulus<int>
{
public:
  int value;
  MathOps(){value=0;}
  MathOps(int x){value=x;}
  result_type operator+(second_argument_type add2)
                            {return value + add2;}
  result_type operator-(second_argument_type sub2)
                            {return value - sub2;}
  result_type operator*(second_argument_type mult2)
                            {return value * mult2;}
  result_type operator/(second_argument_type div2)
                            {return value / div2;}
  result_type operator%(second_argument_type mod2)
                            {return value % mod2;}
  friend ostream& operator<<(ostream& os, const MathOps& obj ) ;
};

ostream& operator<<(ostream& os, const MathOps& obj )
{
       os << obj.value ;
       return os ;
}

void main()
{
  MathOps one,two,three,four,five,six;

// CArchive ar;
  cout << "Using MathOps class..." << endl ;
  //ar.Write(&one,sizeof(one));
  
  one = 18;
  
  cout << "one = " << one << endl ;

  two = one + 1;
  cout << "two = one + 1 = " << two << endl ;

  three = two - 2;
  cout << "three = two - 2 = " << three << endl ;

  four = three * 3;
  cout << "four = three * 3 = " << four << endl ;

  five = four / 4;
  cout << "five = four / 4 = " << five << endl ;

  six = five % 5;
  cout << "six = five % 5 = " << six << endl ;
}
错误是:
error C2593: 'operator <<' is ambiguous
即对象的ambiguity状态
请指教!
发表于 2004-5-22 19:09:22 | 显示全部楼层
VC???????????????????????????????????????
#include <functional>
 楼主| 发表于 2004-5-23 16:38:35 | 显示全部楼层
有无好方法解决?
发表于 2004-5-24 10:58:45 | 显示全部楼层
您还必须
#include <iostream>

btw, main 必须返回 int,这是 ISO 规定的, VC 不报错,是 cl (编译器)的过错。
 楼主| 发表于 2004-5-25 09:32:46 | 显示全部楼层
我都已经包含了
结果还是如此
这是MSDN中的源程序
发表于 2004-5-25 16:44:43 | 显示全部楼层
对不起,小弟没看清。我手头没有 MS VC,以前只在工作时用过 VC++ 6.0。
不过记忆中,MS VC 虽然支持标准有限,但是还不至于这么傻。
您使用的是哪个版本的 VC 呢?如果是 VC++ 6.0 一定要打上 SP5 (Service Pack 5)的大补丁。否则会有一些问题。如果是新出的 VC.NET 听说支持 ISO 标准不错,不过无缘使用。
不过兄弟为什么不用 g++ 呢?
 楼主| 发表于 2004-5-25 17:51:09 | 显示全部楼层
我是用VC6
如果不打补丁, 在源程序上怎么改正?(就是仅仅修改程序)
这种情况在软件的兼容中会发生
在MSDN中输入multiplies
之后会出来一个例子就是例程序
此程序在LINUX下能安全运行
 楼主| 发表于 2004-6-10 09:32:14 | 显示全部楼层
结果查出来了
将重载定义写在类中就可以通过了
属于编译器问题
只是不知道是编译器什么问题?
同样的程序在LINUX可以运行
发表于 2004-6-16 18:03:06 | 显示全部楼层
最初由 xggabc 发表
结果查出来了
将重载定义写在类中就可以通过了
属于编译器问题
只是不知道是编译器什么问题?
同样的程序在LINUX可以运行


我这有大把类似的情况,
我们大一要学 C , 学校是用 VC 与 TC ,
结果我把以前在 Linux 下作编程练习的东西拿到 VC 下试 ,
竟有许多无法正常运行的,有的甚至无法编译。
而她们在 GCC 下都正常的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表