2013-03-23 49 views
0

我试图常量性添加到C++中的变量,通过VC拒绝与Error C2664 : cannot convert MyClass * to const MyClass &编译。我已经竭尽所能,做搜索,阅读类似的问题(12),我仍然解决不了。无法转换MyClass的*为const MyClass的

我的函数定义为:

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呢?

+2

,编译精细的一个是正确的。运行时出现了什么问题? – 2013-03-23 19:10:19

+0

阅读关于const_cast <> http://www.cplusplus.com/doc/tutorial/typecasting/ – OldProgrammer 2013-03-23 19:11:36

回答

3

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

至于代码,你告诉我们而言,以下是正确的:

Merge(*instance); 

如果在运行时不工作,问题是你不向我​​们展示的代码。

1

可以让你的方法

void ClassFoo::FuncFoo(MyClass* const instance) 

,这似乎是唯一的出路签名。在原有的实例是一个指向非const MyClass的。你可以使用const_cast,但是那会是正确的吗?

1

由于NPE说,该方法Merge(*instance);是正确的,但在这里可以知道在C++作为“切片”,你可以谷歌,并尝试通过experemental方式来检测它的问题。

的主要问题是,如下所述:

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". 
} 
相关问题