我想通过一个类的构造函数存储一个指向另一个类的对象的指针。正确的做法是什么?
如果我将 MyClass1* ptr
替换为 const MyClass1* ptr
则没有错误,但在这种情况下我认为我无法更改 ptr
不再。什么是实现我想要的正确方法?
例子.cpp
class MyClass1{
public:
int a;
int b;
};
class MyClass2{
MyClass1* ptr;
public:
MyClass2(const MyClass1& obj){ptr = &obj;};
};
int main(int argc, char* argv[]){
MyClass1 object1;
object1.a = object1.b = 0;
MyClass2 object2(object1);
return 0;
}
通过g++ -o example example.cpp
编译它给我这个错误
example.cpp: In constructor ‘MyClass2::MyClass2(const MyClass1&)’:
example.cpp:10:37: error: invalid conversion from ‘const MyClass1*’ to ‘MyClass1*’ [-fpermissive]
MyClass2(const MyClass1& obj){ptr = &obj;};
最佳答案
如果你想改变 ptr
指向的东西,那么你的函数需要通过非 const
引用来获取它的参数(因为 MyClass2
可能会修改它):
MyClass2(MyClass1& obj) { ptr = &obj; }
或者,如果您不打算修改 ptr
指向的内容,则应将 ptr
声明为指向 const< 的指针
:
const MyClass1* ptr;
这两种解决方案都会导致代码编译。
关于c++ - 从 ‘const type*’ 到 ‘type*’ 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33261204/