无法将MyClass *转换为const MyClass

时间:2013-03-23 19:08:41

标签: c++ visual-c++ syntax const

我正在尝试将constness添加到C ++中的变量中,VC拒绝使用Error C2664 : cannot convert MyClass * to const MyClass &进行编译。我已经尝试了所有内容,完成了搜索,阅读了类似的问题(12),但仍然无法解决。

我的功能定义为:

void ClassFoo::FuncFoo(MyClass* instance){
     Merge(instance);     // <--- Error C2664 -- cannot convert MyClass* to const MyClass &
     Merge(&instance);     // <--- Error C2664 -- cannot convert MyClass** to const MyClass &
     Merge(*instance);     // <--- This compiles fine, but doesn't work properly at runtime
     Merge(const_cast<const GFxTextFormat&>(instance));     // <--- Error C2440
}

MyClass Merge (const MyClass &instance){
}

如何正确地将常量添加到变量instance,以便我可以正确地调用Merge

3 个答案:

答案 0 :(得分:3)

const不是问题,会自动添加。问题是指针与参考。

就您向我们展示的代码而言,以下是正确的:

 Merge(*instance);

如果这在运行时不起作用,则问题在于您没有向我们展示的代码。

答案 1 :(得分:1)

你能否签署你的方法

void ClassFoo::FuncFoo(MyClass* const instance)

这似乎是唯一的方法。在原始实例中,实例是指向非const MyClass的指针。您可以使用const_cast,但这是正确的吗?

答案 2 :(得分:1)

正如NPE所说,方法Merge(*instance);是正确的,但这可能是c ++上已知的“切片”的问题,你可以谷歌并尝试通过实践方式检测它

主要问题如下所述:

struct A
{ 
  A ( const int value ) : myValue1( value ) {};

private:
  double myValue1;
};

struct B : public A 
{ 
  B ( const int first, const int second ) : A( first ), myValue2( second ) {};

private:
  double myValue2;
};

main()
{
 B child( 1, 2 );  // The "child" object contains two values.
 A parent = child; // Here the "slicing" error, but the compiler will not say anything.
                   // So, the object "parent" now is the new object of type "A" and it memory only one value. 
                   // By the way, it can not be downcasted to object of type "B".
}