【发布时间】:2014-11-28 10:57:42
【问题描述】:
为了更容易处理,我想创建一个自定义元素的向量,之后我可以通过A[0] 等轻松访问。问题是每个元素都有一个非空的构造函数,即我不会写
elem A;
我必须写
elem A(int a, int b, int c);
在创建期间使用 a、b、c 固定值。但这对我来说是不可能的,因为我在运行时获取了这些元素的值。
那么,有没有办法做这样的事情:
Vector<elem> A;
elem B(int a, int b, int c);
A.push_back(B);
如果是,怎么做?
作为解释:Vector 可以是std::vector 或QVector,但它们都会导致一个问题,要么在编译时崩溃,要么在运行时崩溃。
编辑:
完整代码:
#ifndef DPC_H
#define DPC_H
#include "../BlackLib/v2_0/BlackGPIO.h"
#include <QVector>
class DPC
{
private:
QVector<BlackLib::BlackGPIO> A;
public:
DPC();
~DPC();
};
#endif // DPC_H
#include "dpc.h"
DPC::DPC()
{
BlackLib::BlackGPIO Pin(BlackLib::BlackGPIO(BlackLib::GPIO_32, BlackLib::input));
/*DPC::A[0] = new */A.push_back(Pin);
A.push_back(Pin);
/*DPC::A[1] = new B*/A.push_back(BlackLib::BlackGPIO(BlackLib::GPIO_33, BlackLib::input));
}
BlackLib 是来自 https://github.com/yigityuce/BlackLib 的 BBB 引脚扩展的数据类型
解决方案:
使用std::vector<std::unique_ptr<BlackLib::BlackGPIO> > A;
【问题讨论】:
-
是的,我收到一条错误消息,告诉我“候选人需要 3 个参数,得到 0”。
-
在哪段代码中?
-
在
Vector<elem> A; -
这不应该要求
elem是 DefaultConstructible。演示:ideone.com/159D9Q -
这不是“完整代码”,见MCVE