注册 登录
编程论坛 C++教室

不改变我的程序如果vc6.0编译能通过有分拿..找到错误也有分拿..呵呵(不玩了,完结)

sunkaidong 发布于 2008-03-18 20:23, 6440 次点击
#include  <iostream>
#include  <string.h>

using namespace std;

class String
{
public:
       String();
       String(char *);
       void Display();
       friend bool operator>(String&,String &);
public:
        char *string;
};
String::String()
{
                string = NULL;
}
String::String(char *p)
{
                    string = new char[strlen(p)+1];  
                    string=p;
}
void String::Display()
{
    cout<<string<<endl;  
}

bool operator>(String &str1,String &str2)
{
     int i=0;
     i = strcmp(str1.string,str2.string);
     if(i> 0)
     return true;
     else  
     return false;
}

main()
{
      String str1("aheo");
      String str2("fudd");
      cout<<(str1>str2);
      if(str1>str2)
      str1.Display();
      else
      str2.Display();
      system("pause");
      return 0;
}
我从csdn上找来的...由于论坛人少..我经常逛csdn

[[it] 本帖最后由 sunkaidong 于 2008-3-19 10:21 编辑 [/it]]
14 回复
#2
sunkaidong2008-03-18 20:37
我帮自己顶一下..
#3
key_04232008-03-18 21:36
喜欢人少的地儿^_^
看看
#4
key_04232008-03-18 22:08
'operator >' is ambiguous
——————————————————————————————————————————
做不出来
关注中。。。
#5
sunkaidong2008-03-18 22:10
呵呵..给你加油..也给你点分..表示奖励....
#6
baoyibao2008-03-18 22:34
把以下的内容
#include  <iostream>
#include  <string.h>

//using namespace std; //using语句去掉
然后cout改为std::cout, endl改为std::endl即可通过编译并且成功运行了。
不使用using namespace std;否则vc6.0在使用重载时将经常出现问题
#7
baoyibao2008-03-18 22:35
对了,另外你的友元函数说明少了个参数吧:friend bool operator>(String &);
应该是friend bool operator>(String& str1, String& str2);
#8
key_04232008-03-18 22:40
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-18 22:10 的发言:[/bo]

呵呵..给你加油..也给你点分..表示奖励....

谢谢楼主~
#9
key_04232008-03-18 22:41
厉害!果然没错了
#10
sunkaidong2008-03-18 22:47
按照道理说既然是面向对象的问题就不应该存在...理由呢?命名空间存在不对的理由呢?用vs2005不会有问题..不得不说是个缺憾...恩...那个string&被我漏的..
#11
wfx_best2008-03-18 22:55
为什么VC++ 会出现这样的问题呢,我以前就遇到过,我用友元重载 - 号,出错但一直找不出错误.
是VC++ 支持标准度低? 还是 VC++的 buge?
楼主或  6 楼  来解答一下
想知道...........
think!
#12
Ethip2008-03-18 22:56
你也忒狂啦
我的Compile结果:
ompiling...
tst.cpp
D:\test\tst.cpp(33) : error C2673: '>' : global functions do not have 'this' pointers
D:\test\tst.cpp(33) : error C2228: left of '.string' must have class/struct/union type
D:\test\tst.cpp(44) : error C2593: 'operator >' is ambiguous
D:\test\tst.cpp(45) : error C2593: 'operator >' is ambiguous
Error executing cl.exe.

tst.obj - 4 error(s), 0 warning(s)
#13
wfx_best2008-03-18 22:59
错误原因已经出水了
楼主或 6 楼的来解释一下吧
#14
sunkaidong2008-03-18 23:00
呵呵..楼上的我是为了玩玩..没什么人气啊..你换一个vs2005可以编译通过....我试过了...
以后要是谁有时间就到上面取点东西回来讨论啊...那上面有很深的技术的帖子...很不错...一起加油啊

[[it] 本帖最后由 sunkaidong 于 2008-3-18 23:12 编辑 [/it]]
#15
baoyibao2008-03-19 09:54
其实,具体的原因我也不是很明白。估计是编译器的个别问题吧。我用C-Free等编译都没有问题的。不过,值得考虑的一点是,如果用了using namespace std,这样会把std域中的所有名称引入,污染了程序的全局名称。或许上面的问题就是由于“污染”所造成的吧。
    所以可以在类定义之后加入using namespace std,或在main函数中加入using namespace std语句。但是推荐的做法是只使用using std::cout;using std::cin;和using std::endl;这样便不会产生以上问题了。
1