C ++中的2D对象数组

时间:2016-11-23 23:09:27

标签: c++ arrays qt oop

将对象2d [5][5]数组分配给对象时遇到问题。

这是我的数组定义

class PrintRectangle : public QWidget
{

public:
    bool clicked[5][5] = {};
    teacher *tech;
    perceptron *p;

};

片段perceptron

class perceptron
{
public:
    perceptron& operator=(const perceptron&);
};

当我尝试将对象分配给我的perceptron *p

PrintRectangle::PrintRectangle(QWidget *parent) : QWidget(parent)
{
    tech = new teacher(clicked);

    *p = new perceptron[5][5];

    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
        {
            p[i][j] = new perceptron();
            p[i][j].randweight();
        }
    }

    double learnConst = 0.1;
    tech->learnPerceptrons(p);
}

我收到错误

    E:\Sieci Neuronowe\Perceptron\printrectangle.cpp:10: error: no match for 'operator=' (operand types are 'perceptron' and 'perceptron (*)[5]')
         *p = new perceptron[5][5];
            ^

E:\Sieci Neuronowe\Perceptron\printrectangle.cpp:16: error: no match for 'operator[]' (operand types are 'perceptron' and 'int')
             p[i][j] = new perceptron();
                 ^

我只有

perceptron& perceptron::operator=(const perceptron&){

    return * this;
}

在我的感知课上。我怎么能纠正这个?我并不清楚指点。

1 个答案:

答案 0 :(得分:1)

*p = new perceptron[5][5];
由于以下原因,

是错误的。

  1. 类型不匹配。

    *p的类型为perceptron new perceptron[5][5];的类型为perception (*)[5]

    没有从perception (*)[5]转换为perceptron

  2. 取消引用p

    解除引用p,即*p仅在您为p分配内存后才会在运行时生效。

  3. <强>解决方案:

    您可以修复内存分配和类型不匹配问题但我强烈建议您使用标准库中的容器。

    class PrintRectangle : public QWidget
    {
      public:
    
        std::vector<teacher> tech;               // 1D array
        std::vector<std::vector<perceptron>> p;  // 2D array.
    };
    

    您可以使用以下命令在构造函数中初始化它们:

    PrintRectangle::PrintRectangle(QWidget *parent) :
       QWidget(parent),
       tech(clicked),
       p(5, std::vector<perceptron>(5))
    {
       ...
    }