在 C++ 中创建一个列表来保存对象

Posted

技术标签:

【中文标题】在 C++ 中创建一个列表来保存对象【英文标题】:Creating a list to hold objects in C++ 【发布时间】:2013-08-01 16:22:51 【问题描述】:

如果这看起来有点幼稚,请原谅我,但我对 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

【问题讨论】:

你能发布编译器错误吗? 你能告诉我们节点类吗? 您不是要在node 列表中插入node* 吗? 蒂亚戈是对的。将其声明为局部变量: node aNode(14, 32);那么它应该很乐意将其放入列表中 @GrahamGriffiths 这没有帮助:/我在主帖中添加了错误和节点类。 【参考方案1】:

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

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);

【讨论】:

这消除了一堆错误,但仍然存在3个错误:错误C2143:语法错误:缺少';'前 '。'错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数错误 C2371: 'dataSet' : redefinition;不同的基本类型 @user1848437 您可以将其作为问题的“更新”部分发布,以便所有人轻松查看。【参考方案2】:

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

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

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

dataSet.push_back(aNode);

【讨论】:

【参考方案3】:

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

dataSet 应定义为:

std::list<node*> dataSet;

与您的迭代器相同:

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

【讨论】:

【参考方案4】:

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

试试

dataSet.insert(it, aNode);

【讨论】:

由于这可能只是一个复制/粘贴错误,而不是 OP 实际编译的内容,因此最好询问缺少的 ; 是在源代码中还是副本/通过评论而不是答案粘贴错误。 @user1848437 可能想在; 中编辑您的问题;)【参考方案5】:

“缺少类型说明符 - 假定为 int” 可能是因为错过了

#include &lt;list&gt;

或者丢失了

#include "header for node"

【讨论】:

以上是关于在 C++ 中创建一个列表来保存对象的主要内容,如果未能解决你的问题,请参考以下文章

c++ 和 OpenGl:如何从类中创建网格对象实例

在 C++ 中使用另一个类的对象计数在一个类中创建一个数组

保存大量对象需要花费大量时间

在 C++ 中的类中创建类对象的动态数组

如何在 C++ 中创建类对象的向量?

在 C++ 中创建对象并将指针传递给 python