在 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<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);
【讨论】:
这消除了一堆错误,但仍然存在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 <list>
或者丢失了
#include "header for node"
【讨论】:
以上是关于在 C++ 中创建一个列表来保存对象的主要内容,如果未能解决你的问题,请参考以下文章