c++ - 从 ‘const type*’ 到 ‘type*’ 的无效转换

标签 c++ pointers reference constants

我想通过一个类的构造函数存储一个指向另一个类的对象的指针。正确的做法是什么?

如果我将 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/

相关文章:

java - 使用C++获取Java对象调用Java方法

c++ - 如何查找输入的 double 是否是 0.05 的倍数

c++ - C++:在程序中创建一个指针,然后在另一个程序中访问该位置

c# - 如何引用一个API的两个版本?

c++ - 按数字排序

c++ - 错误 : non-aggregate type 'vector<string>' cannot be initialized with an initializer list

c - 双指针函数

c++ - 什么是近、远和巨大的指针?

c++ - 返回迭代器内容并递增它的简单方法

c++ - 将当前对象传递给方法、引用或指针