这很奇怪。我在一个类中创建了一个矢量,但不能在另一个类中创建它。他是我所拥有的代表:
main.h
#include <Windows.h>
#include <ShellAPI.h>
#include <vector>
#include <string>
#include <iostream>
#include "taco.h"
class MyClass
{
public:
int someint;
vector<int> myOrder;
};
taco.h
#include <vector>
class OtherClass
{
public:
vector<int> otherOrder;
};
我收到关于taco.h中的向量声明的编译错误:
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
我在这里缺少什么?我可以取消注释第二个向量声明,它编译得很好。
答案 0 :(得分:12)
尝试:
std::vector<int> otherOrder;
vector
是std
命名空间的一部分。这意味着无论何时在头文件中使用vector
,都应包含std::
前缀。
你有时可以忘记它的原因是一些包含的文件中可能包含using namespace std;
,允许你省略前缀。但是,您应该避免头文件中的using
关键字,因为它会污染include
它的任何文件的命名空间。
有关using namespace ...
危险的更详细说明,请参阅this thread。
答案 1 :(得分:3)
试试std::vector<int>
。你应该使用命名空间---我假设你有
using namespace std;
在main.h
的某个地方。关于为什么使用using
是不好的做法,有很多关于SO的讨论;我建议你看一下。
答案 2 :(得分:3)
所有C ++标准库对象都位于std
命名空间中。尝试
class MyClass
{
public:
int someint;
std::vector<int> myOrder;
// ^^^^^
};
答案 3 :(得分:1)
std::vector<int> ?