5

我有数据的数据结构和处理器类,数据堆叠没有指针以加快 SIMD 处理:

struct trajectory_data {
    float position[3];
    float velocity[3];
    float acceleration[3];
    ...
};

class trajectory_processor{
private:
    vector<trajectory_data> tdata;
    vector<trajectory_data> default_data;
    ...
};

但是我实际上没有向向量添加数据集,这些都不起作用:

trajectory_processor::trajectory_processor(){

    // gives error: no match for ‘operator=’ in ...
    trajectory_data d0();
    default_data[0] = d0;

    // gives error: no matching function for call to
    // ‘std::vector<trajectory_data>::push_back(trajectory_data (&)())
    trajectory_data d1();
    default_data.push_back(d1);
};

根据push_back 参考C++ 向量 push_back我认为这应该很容易,但即使经过几次谷歌搜索,我也找不到任何答案。

这个项目涉及 html/javascript 中的交叉编码,每次我切换回 c++ 时,我似乎都会像这样撞到一堵墙,它开始让我紧张。

4

3 回答 3

8

您似乎是Most Vexing Parse的受害者。基本上,这条线

trajectory_data d1();

实际上是在声明一个不带参数并返回一个trajectory_data对象的函数 d1。

将其更改为

trajectory_data d1;

应该解决您的问题,对于d0. 无论如何都会调用默认构造函数,不需要().

于 2013-06-20T15:52:59.000 回答
1

尝试这个:default_data.push_back(trajectory_data());

于 2013-06-20T15:53:14.063 回答
0

更改trajectory_data d0();trajectory_data d0;

第一个声明了一个d0不带参数并返回的函数trajectory_data
第二个明确而清晰地创建了一个trajectory_data被调用的实例d0

这也适用于trajectory_data d1();

于 2013-06-20T15:52:09.880 回答