我正在尝试将constness添加到C ++中的变量中,VC拒绝使用Error C2664 : cannot convert MyClass * to const MyClass &
进行编译。我已经尝试了所有内容,完成了搜索,阅读了类似的问题(1,2),但仍然无法解决。
我的功能定义为:
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
?
答案 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".
}