模糊复制构造函数vc 2008

时间:2009-12-30 03:34:01

标签: visual-c++

我正在尝试在最新的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

1 个答案:

答案 0 :(得分:5)

尝试更改

  test(test &source);

  test(const test &source);

问题是test_proc调用返回一个临时测试对象,该对象可以传递给接受const引用但不是普通引用的函数。