2010-07-28 136 views
0

这很奇怪。我在一个类中创建了一个向量,但无法在另一个类中创建它。他是什么,我有一个表示:C++无法创建矢量

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

我在这里错过了什么?我可以取消注释掉第二个向量声明并且编译好。

+4

这表明,我认为一些.h文件中已'使用命名空间std;'在它的地方,这通常是一个坏主意。 'using'不应该在头文件中完成,因为它会为任何直接或间接包含该头文件的.cpp文件调整名称空间。仅对源文件使用''使用',效果是本地的。 – 2010-07-28 18:09:06

回答

11

尝试:

std::vector<int> otherOrder; 

vectorstd命名空间的一部分。这意味着只要在头文件中使用vector,就应该包含前缀std::

你有时可能忘记忘记它的原因是一些包含的文件可能包含using namespace std;,允许你忽略前缀。但是,您应该避免在头文件中使用using关键字,因为它会污染include它的任何文件的名称空间。

有关using namespace ...的危险性的更详细说明,请参阅this thread

+1

[This answer](http://stackoverflow.com/questions/2879555/c-stl-how-to-write-wrappers-for-cout-cerr-cin-and-endl/2880136#2880136)是另一种反对意见'使用名称空间std'。 – sbi 2010-07-28 18:10:37

+0

@sbi:谢谢,很好的论点。 – 2010-07-28 18:14:25

+0

嗯由于某种原因,我认为我在main.h中使用namespace std会级联到taco.h.感谢你的回答! – 2010-07-28 18:17:02

3

尝试std::vector<int>。你应该使用命名空间---我假设你有

using namespace std; 

main.h某处。关于为什么使用using是不好的做法,有很多关于这个问题的讨论;我建议你检查一下。

3

所有C++标准库对象都位于std命名空间中。尝试

class MyClass 
{ 

public: 
    int someint; 
    std::vector<int> myOrder; 
// ^^^^^ 
};