C++,转换构造函数, "no operator "="匹配这些操作数

标签 c++ visual-studio-2013

你好,我的 C++ 项目有点问题。

首先我得到了类:

class base
{
protected:
    int R, G, B;
public:
    base();
    ~base();
};

第二类:

class superBase :
    public base
{
public:
    superBase(){R=0; G=0; B=0};
    ~superBase();
};

最后一个包含基类矩阵的类:

class gameTable : public gameGraphics
{
private:
    base** table;
public:
    gameTable();
    ~gameTable();
}

当我构造 gameTable 类时,我构造了 64 个具有从 0 到 255 的随机 R、G、B 值的基础对象。

所以当程序继续进行时,表中的一些我的元素“进化”并成为 superBase 的。所以这是我的问题,我不知道该怎么做。我试过了,

这似乎无法正常工作。

        superBase newBase;
        table[column][row].~base();
        table[column][row] = newBase;

和另一个版本:

    table[column][row].~base();
    table[column][row] = new superBase;

我的问题是如何将表格的一个元素演变成 superBase 类元素。据我所知,它可以使用与基类元素相同的指针。

问候并感谢您的帮助!

最佳答案

“no operator ”=" matches these operands

这里:

table[column][row] = new superBase;

table[a][b] 是一个 base 左值引用。您将调用 new 的结果传递给它。这将返回指向 superBase 的指针。那个任务不行这个会编译

table[column][row] = superBase();

但你会得到 object slicing .您需要找到一种方法来存储指向基类型的(智能)指针。

除此之外,您的基类需要一个虚拟析构函数。而且您不应该直接调用析构函数。

关于C++,转换构造函数, "no operator "="匹配这些操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228235/

相关文章:

c++ - std::get 与 std::tuple 的效率

c++ - 当不是 waitForFinished() 时,QProcess 不发出信号

c++ - 为什么我的编译器在 64 位机器上运行时使用 8 位字符?

windows - 查找哪个应用程序使用 Ctrl+逗号

c++ - 为什么我不能将这个转换后的 directory_iterator 插入到一个 vector 中?

c++ - 如何将原始 MBCS 字符串 (SHIFT-JIS) 从 Windows 转换为 Linux 上的 UTF-8

c++ - 标记 int unsigned 的编译器优化?

unit-testing - Visual Studio 中用于 Angular 2 开发的单元测试 Typescript

c# - 无法加载文件或程序集 'System.Web.Mvc' 或其依赖项之一。 2个项目。一次只有一个会工作

c# - 如何将两个不同的文本框放入同一级别?