作者在 2014-02-05 09:37:48 发布以下内容
今天复习关于运算符重载这一章节,以前学习的时候用的是gcc编译器, 在VC6.0的时候会遇到莫名其妙的问题:
--------------------Configuration: integer1 - Win32 Debug--------------------
Compiling...
integer.cpp
D:\My Documents\我的工程\integer1\integer.cpp(9) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
执行 cl.exe 时出错.
integer1.exe - 1 error(s), 0 warning(s)
|
有人说是VC的一个BUG,我想只是某种形式的对标准C++的不支持吧。我发现:
我们在运算符重载的时候,不能在开头写上:using namespace std;
所有的cout, endl都写成std::cout, std::endl就可以通过编译,否则就会出现上面的错误。但是如果所有的运算符重载都是成员函数的时候,却可以加上using namespace std;
怪否???
|
#include <iostream>
// VC6.0中,运算符重载,下面的声明会导致错误
// using namespace std;
class integer {
int i;
public:
integer(int ii) : i(ii) {}
friend const integer
operator+(const integer& rl);
friend const integer
operator-(const integer& rl);
friend const integer
operator++(integer& rl);
friend const integer
operator++(integer& rl, int);
friend const integer
operator--(integer& rl);
friend const integer
operator--(integer& rl, int);
void print() const {
std::cout << "i: " << i << std::endl;
}
};
const integer
operator+(const integer& rl) {
return integer(+rl.i);
}
const integer
operator-(const integer& rl) {
return integer(-rl.i);
}
const integer
operator++(integer& rl) {
++rl.i;
return integer(rl.i);
}
const integer
operator++(integer& rl, int) {
integer before(rl.i);
rl.i++;
return before;
}
const integer
operator--(integer& rl) {
return integer(--rl.i);
}
const integer
operator--(integer& rl, int) {
integer before(rl.i);
rl.i--;
return before;
}
int main() {
integer i(-1);
(+i).print();
(-i).print();
++i;
i.print();
i++;
i.print();
--i;
i.print();
i--;
i.print();
}
原文:http://blog.chinaunix.net/uid-16318340-id-2748772.html
|