我将对象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;
}


在我的感知器课堂上。我该如何纠正?我不太清楚指针。

最佳答案

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


错误是由于以下原因。


类型不匹配。

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

perception (*)[5]perceptron没有转换。
取消引用p

取消引用p,即*p仅在为p分配了内存后才在运行时有效。




解:

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

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))
{
   ...
}

09-04 17:21