C++ Overload Operator = for Pointers 不能正常工作/编译

标签 c++ pointers operator-overloading

我正在尝试使用 = 的运算符重载实现模板类 到目前为止它适用于非指针元素。对于 Pointer Elements,它并不像我期望的那样工作,所以我的问题是为什么这是母 pig 以及我如何强制 C++ 按我的意愿去做。

我的模板类:

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();
    }
};

使用 IBag 类的工作原理:

class IBagExample
{
   void showExample() {
        IBag<QString*> pbag;
        pbag = new QString("Blub"); // This works !
    }
};

编译不通过的原因:

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

我得到的编译器错误是:

error: no viable conversion from 'QString *' to 'IBag<QString *>'
    IBag<QString*> pbag2 = new QString("Blub");
                   ^       ~~~~~~~~~~~~~~~~~~~

对我来说似乎是一样的,也许我需要告诉编译器一些事情来理解现在要将什么类型的指针插入 pbag。但我不知道该怎么做。

像这样使用运算符重载

IBag<QString*> pbag; pbag = new QString("Blub"); // This does compile !

看起来很荒谬。

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

非常感谢,

最佳答案

IBag<QString*> pbag = new QString("Blub");

这实际上并没有调用赋值运算符,它调用了构造函数。您需要定义如下内容:

template <class T>
class IBag {
public:
    IBag( const IBag& rhs )
    {
        // ....
    }

};

或:

    IBag( const T& rhs )
    {
        // ....
    }

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

相关文章:

c++ - 在 C++ 中创建 stub 功能

c - 将二维数组传递给 C 中的函数?

c - 从函数返回 FILE 指针并在 main 上处理它

c++ - 使用一个运算符的重载来重载另一个运算符是一种好习惯吗?

c++ - 尝试使用 stringstream 将字符串转换为 int

c++ - 如何在 C++ 中重载非交换运算符的两种可能性?

c++ - 在结构中定义 operator() 函数

c++ - 需要帮助构建正则表达式模式

c++ - 如何将外部库静态链接到我的可执行文件中?

c - 警告 : assignment makes pointer from integer without a cast [-Wint-conversion]