0

我正在尝试将常量添加到 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正确调用它?

4

3 回答 3

3

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

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

 Merge(*instance);

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

于 2013-03-23T19:11:13.167 回答
1

你能在你的方法上签名吗

void ClassFoo::FuncFoo(MyClass* const instance)

这似乎是唯一的方法。在最初,instance 是指向非常量 MyClass 的指针。您可以使用const_cast,但这对吗?

于 2013-03-23T19:12:42.517 回答
1

正如 NPE 所说,该方法Merge(*instance);是正确的,但这里可能是 c++ 上称为“切片”的问题,您可以 google 并尝试通过实验方式检测它。

主要问题如下所述:

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".
}
于 2013-03-23T19:27:18.613 回答