我有2d矢量对象
std::vector<std::vector<perceptron>> p;
现在我想像这样分配对象perceptron
PrintRectangle::PrintRectangle(QWidget *parent) : QWidget(parent),
p(5, std::vector<perceptron>(5))
{
tech = new teacher(clicked);
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:16: error: no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<perceptron> >::value_type {aka perceptron}' and 'perceptron*')
p[i][j] = new perceptron();
^
我该如何修复?
编辑:
我模仿了C#的代码
Perceptron[] p;
p = new Perceptron[10];
for (int i = 0; i < 10;i++)
{
p[i] = new Perceptron();
p[i].randweight();
}
在C#中,这段代码运行正常。 它如何适合C ++
答案 0 :(得分:4)
new
运算符为perceptron
的实例创建指针,因此编译错误正确(perceptron*
!= perceptron
)
幸运的是,在您创建向量时,向量已经预先创建了所有perceptron
个实例,因此您只需删除相关的行。
PrintRectangle::PrintRectangle(QWidget *parent) : QWidget(parent),
p(5, std::vector<perceptron>(5)) // <----------- 25 perceptron objects created here!
{
tech = new teacher(clicked);
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
{
// p[i][j] = new perceptron(); NO NEED FOR THIS LINE
p[i][j].randweight();
}
}
double learnConst = 0.1;
}
编辑:对于您更新的问题(即如何使C ++代码与C#代码匹配),您可以使用智能指针来存储perceptron
个对象:
PrintRectangle::PrintRectangle(QWidget *parent) : QWidget(parent),
p(5, std::vector<std::unique_ptr<perceptron>>(5))
{
tech = new teacher(clicked);
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
{
p[i][j].reset(new perceptron)
p[i][j]->randweight();
}
}
double learnConst = 0.1;
}
我在这里选择unique_ptr
来保存perceptron
指针,但是您应该确定您的所有权要求是什么,并根据您的需要选择最佳指针类型(例如unique_ptr
,{{ 1}},原始指针等)。
HOWEVER ,除非你真的需要将代码与C#相匹配,否则你的代码可能会更快(更容易使用)最初通过避免指针开销(例如解除引用)。
答案 1 :(得分:0)
percepteron
返回指向perceptron
的指针。如果您希望p
个对象分别进行堆分配,则需要将vector<vector<pecepteron *>>
更改为percepteron
(或更好,指向percepteron
的适当智能指针)。如果单个堆分配不重要,并且vector<percepteron>
有一个执行可接受初始化的默认构造函数,那么根本不需要这个赋值 - 单个INSERT into phone_numbers(id, number) VALUE (null, CONCAT('61', SUBSTR('0455000000', 2)))
对象的分配已经运行这个构造函数。