6

如果这看起来有点幼稚,请原谅我,但我对 C++ 相当陌生,并且在 C 和 Java 中使用了多年之后,我想我的头脑有点困惑。

我正在尝试制作一个包含我创建的节点的未知大小的数组。

node *aNode = new node(14,32);
std::list<node> dataSet;
std::list<node>::iterator it;
it = dataSet.begin();
dataSet.insert(it, aNode)

但是,当我编译这个(概念验证测试)时,它会拒绝,抛出各种错误。

我知道这很简单,我就是想不通。任何人都可以帮忙吗?提前致谢!

编辑:这是节点:

class node{
    float startPoint;
    float endPoint;
    float value;
public:
    node(float, float);
    void setValues(float, float);
};

node::node(float start, float end){
    startPoint = start;
    endPoint = end;
}

和编译器错误:

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

错误 C2371:“它”:重新定义;不同的基本类型

错误 C2440:“正在初始化”:无法从“std::list<_Ty>::_Iterator<_Secure_validation>”转换为“int”

错误 C2146:语法错误:缺少“;” 在标识符“dataSet”之前

错误 C2143:语法错误:缺少“;” 前 '。'

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

错误 C2371:“数据集”:重新定义;不同的基本类型

更新:我将一小段代码更改为:

 node aNode(14, 32);
 std::list<node> dataSet;
 dataSet.insert(dataSet.begin(), aNode);

但是这3个错误仍然存​​在:

 error C2143: syntax error : missing ';' before '.'
 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
 error C2371: 'dataSet' : redefinition; different basic types
4

5 回答 5

7

您的列表应该是类型std::list<node*>,或者您应该插入一个节点对象(而不是指向一个的指针)。

node *aNode = new node(14, 32);
std::list<node*> dataSet;
dataSet.insert(dataSet.begin(), aNode);

或者

node aNode(14, 32);
std::list<node> dataSet;
dataSet.insert(dataSet.begin(), aNode);
于 2013-08-01T16:27:17.737 回答
1

看起来您需要声明您的列表以包含节点指针,即:

std::list<node*> dataSet
std::list<node*>::iterator it;

另外值得注意的是,您可以在不使用迭代器的情况下将项目添加到列表中:

dataSet.push_back(aNode);
于 2013-08-01T16:27:21.373 回答
1

aNode 是指向堆上节点对象的指针。

数据集应定义为:

std::list<node*> dataSet;

与您的迭代器相同:

std::list<node*>::iterator it;
于 2013-08-01T16:28:45.247 回答
0

对于您在最后一个括号后发布的缺少分号的代码

尝试

dataSet.insert(it, aNode);
于 2013-08-01T16:27:46.293 回答
0

“缺少类型说明符 - 假定为 int”可能是由于缺少

#include <list>

或失踪

#include "header for node"

于 2013-08-01T17:47:26.080 回答