【发布时间】:2015-10-21 13:52:24
【问题描述】:
我想通过一个类的构造函数存储一个指向另一个类的对象的指针。这样做的正确方法是什么?
如果我将MyClass1* ptr 替换为const MyClass1* ptr,则没有错误,但在这种情况下,我认为我不能再更改ptr。实现我想要的正确方法是什么?
example.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:在构造函数'MyClass2::MyClass2(const MyClass1&)'中:
example.cpp:10:37: 错误:从‘const MyClass1*’到‘MyClass1*’的无效转换[-fpermissive]
MyClass2(const MyClass1& obj){ptr = &obj;};
【问题讨论】:
-
为什么不删除
obj参数的const修饰符?你也可以直接传递指针而不是引用。 -
@aslg:因为我不希望构造函数可以修改对象。 (我知道没有任何东西可以实际修改该对象)
-
@giusva 但是如果你想在你的实例中存储一个可修改的指针,你不能给它传递一个 const 指针。你不能两全其美。构造函数最终是属于您的类的函数。它可以对成员数据以及任何其他成员函数进行操作,即使您在特定情况下不希望这样做。
-
@giusva 你是对的,如果只看你问什么,这并不是真正的重复。但是这个问题与您的基本问题/潜在问题相匹配:“const MyClass1 *”中的 const 是什么。
标签: c++ pointers reference constants