附加到矢量时“没有命名类型”错误

时间:2014-07-24 22:02:10

标签: c++ scope

#include <vector>
#include "Node.h" // EDIT: added
Node node1(true,11);
Node node2(true,04);
std::vector<Node> room1;
room1.push_back(node1);

我只想将node1添加到名为room1的节点向量中。对我而言,它看起来就是教程如何指示,但是我收到错误“room1没有命名类型。”


编辑:已包含标题到节点。所有Node都是一个接受(bool,int)并存储它。 (该程序长达数百行,只是为了保持内容的相关性。)

3 个答案:

答案 0 :(得分:3)

关于room1未命名类型的错误来自您的代码不在函数或对象方法中。您可以将定义放在文件的外部作用域中,但不能将行放在要执行的任意代码行中。代码需要运行上下文。

#include <vector>
#include "Node.h"

int main() {
    Node node1(true,11);
    Node node2(true,04);
    std::vector<Node> room1;
    room1.push_back(node1);
}

请注意,不从main返回结果是C ++规范为main()做出的非常具体的限制:

What should main() return in C and C++?

如果他们有一个返回类型,你编写的其他函数应该有一个return语句。

答案 1 :(得分:1)

C++的语法禁止这样做,因为命名空间范围内允许的唯一内容是declarations。这些可以是类,函数或嵌套的命名空间声明。由于room1.push_back(node1);不属于此类别,因此您的计划格式不正确。你可能想把它放在一个函数中。最简单的例子就是将它放在main

#include <vector>
#include "Node.h" // EDIT: added
Node node1(true,11);
Node node2(true,04);
std::vector<Node> room1;

int main()
{
room1.push_back(node1);
return 0;
}

您可能希望将room1node1node2移至main

答案 2 :(得分:0)

您忘记包含Node的标头,或者更一般地说,Node在当前翻译单元中不是可见类型。