C++ Overload Operator = for Pointers 不编译

标签 c++ pointers operator-overloading

我正在尝试使用 = 的运算符重载实现模板类 到目前为止它适用于非指针元素,但如果我尝试它用于指针它不会编译

我的模板类:

template <class T>
class IBag {
public:
    T _val;
    void Set(T val) { _val = val; } 
    T Get() { return _val; }

    IBag& operator=(T val) {
        this->Set(val);
        return *this;
    }

    operator T() {
        return this->Get();
    }
};

如何使用它:

class IBagExample
{
    static void showExample() {
        IBag<QString>* bag = new IBag<QString>();
        bag->Set(QString("Blub"));
        *bag = QString("Blub");
    }
};

编译不通过的原因:

class IBagExample
{
    static void showExample() {
        IBag<QString*>* pbag = new IBag<QString*>();
        pbag->Set(new QString("Blub")); // This works
        pbag = new QString("Blub"); // This doesn't works ?!?
    }
};

我得到的编译器错误是:

error: assigning to 'IBag<QString *> *' from incompatible type 'QString *'
    pbag = new QString("Blub");
         ^ ~~~~~~~~~~~~~~~~~~~

所以我的问题是如何完成这项工作,我预计 = 运算符的重载将强制 C++ 将所有请求(包括新请求)通过管道传输到我的自定义函数,如果它不是当前类的新构造函数(所以IBag* x = new IBag() 将分配 IBag 但 x = new QString("sdjf"); 将转发到我的自定义重载,因为它是一个不同的对象)

(注意:IBag 示例只是我尝试实现的代码的简化。)

非常感谢,

最佳答案

错误信息说得好:

error: assigning to 'IBag<QString *> *' from incompatible type 'QString *'
    pbag = new QString("Blub");
         ^ ~~~~~~~~~~~~~~~~~~~

pbag 是指针,不是 IBag。您为 IBag 重载了 operator =,而不是为 IBag *(这是不可能的)。

这应该可以编译,因为它调用了您的运算符:

*pbag = new QString("Blub");

关于C++ Overload Operator = for Pointers 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604548/

相关文章:

delphi - 关于在Delphi中设置动画的指针的棘手事情

operator-overloading - 如何在Rust中实现惯用运算符重载值和引用?

包含新指针的 vector 的 C++ 分配

c++ - 从具有 O(1) 运行时间的 vector 中删除元素

c++ - 使用双指针创建树

C++ 正在重载我重载的运算符?

c++ - 在 C++ 中重载输入/输出运算符

c++ - 链接到静态 .lib 的问题链接到静态 .lib

C++使随机引擎静态

c - 如何使用memcpy初始化struct中的char指针