我将对象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))
{
...
}