我正在尝试在最新的Visual Studio(2008)中重新编译旧代码,而以前工作的代码现在无法编译。其中一个问题是由于我班级的操作员超载。下面有一个简化的类来演示这个问题。如果我删除int和char *的转换运算符,那么它工作正常。因此,修复我的问题的方法之一是用过程to_char和to_int替换它们并使用它们,但它需要在代码中进行大量更改(该类被大量使用)。必须有一些更好,更智能的方法来解决它。非常感谢任何帮助: - )
class test
{
public:
test();
test(char* s2);
test(int num);
test(test &source);
~test();
operator char*();
operator int();
};
test::test() {
}
test::test(char* s2) {
}
test::test(int num) {
}
test::test(test &source) {
}
test::operator char*() {
}
test::operator int() {
}
test test_proc() {
test aa;
return aa;
}
int test_proc2(test aa)
{
return 0;
}
int main()
{
test_proc2(test_proc());
}
//test.cpp(60) : error C2664: 'test_proc2' : cannot convert parameter 1 from 'test' to 'test'
// Cannot copy construct class 'test' due to ambiguous copy constructors or no available copy constructor
答案 0 :(得分:5)
尝试更改
test(test &source);
到
test(const test &source);
问题是test_proc调用返回一个临时测试对象,该对象可以传递给接受const引用但不是普通引用的函数。