gpt4 book ai didi

c++ - 如何将对象分配给与 operator= 不匹配的 2d vector

转载 作者:行者123 更新时间:2023-11-30 01:41:49 26 4
gpt4 key购买 nike

我有带对象的二维 vector

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++

最佳答案

new 运算符创建一个指向 perceptron 实例的指针,因此编译器错误是正确的(perceptron* != 感知器).

幸运的是,当您创建 vector 时,该 vector 已经预先创建了您所有的感知器实例,因此您可以简单地删除有问题的行。

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_ptrshared_ptr、原始指针等)。

但是,除非您真的需要将代码与 C# 的功能相匹配,否则您的代码可能会比您执行它的方式更快(并且更易于使用)最初是通过避免指针开销(例如取消引用)。

关于c++ - 如何将对象分配给与 operator= 不匹配的 2d vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com