如何将对象分配到2D矢量no Match oterator =
How to assignment object to 2d vector no match for operator=
我有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 NeuronowePerceptronprintrectangle.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
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
,shared_ptr
,RAW指针等)。
但是,,除非您真正需要将代码与C#匹配,否则您的代码可能会更快(并且更易于使用)您做的方式会更快(并且更易于使用)最初是通过避免指针开销(例如退出)。
new perceptron()
将指针返回到percepteron
。如果您希望将perceptron
对象单独分配,则需要将p
更改为vector<vector<pecepteron *>>
(或者更好,是percepteron
的适当智能指针)。如果单个堆分配并不重要,并且percepteron
具有可接受的初始化的默认构造函数,那么您根本不需要此分配 - 单个vector<percepteron>
对象的分配将已经运行此构造函数。
相关文章:
- 分段故障(堆芯转储)矢量
- "error: no matching function for call to"构造函数错误
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 将二维矢量传递给类
- 读取文件并输入到矢量中
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 调用专用模板时出错"no matching function for call to [...]"
- 无法通过空白将文本文件行分隔为矢量
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 正在将csv文件读取为双精度矢量
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何通过 getter 函数删除矢量的元素?
- 如何在C++中将数组转换为矢量指针
- 在C++中将矢量转换为嵌套地图
- C++矢量迭代
- 尝试在矢量上使用擦除功能时"no matching function for call"
- 3D 矢量 - "No instance of overload function?"
- 不能使用矢量::插入"no instance of overloaded function..."
- 如何修复矢量push_back中的"no instance of overloaded function"?
- 如何将对象分配到2D矢量no Match oterator =