2009-11-05 99 views
0

问题我已经在Util.h这种方法声明文件C++编译与

30:string to_string(const bit_vector& v); 

Util.cc文件中有定义

string to_string(const bit_vector& v){ 
string str = ""; 
    for (bit_vector::const_iterator i = v.begin(); i < v.end(); ++i){ 
    if(*i == 1) str += "1"; 
    else str += "0"; 
    } 
    return str; 
} 

当我尝试建立项目它说,在线路30

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C2143: syntax error : missing ',' before '&' 

即时通讯使用visual studio 2008,有人能帮我摆脱这两个错误!不知道bit_vector是否有问题!有任何想法吗???

+0

在相关说明中,您可以使用std :: bitset <>,因为它有自己的to_string()方法。不幸的是,打电话有点痛苦。有关详细信息,请参阅以下内容:http://www.sgi.com/tech/stl/bitset.html – Void 2009-11-05 18:36:59

+0

要使第30行起作用,您必须先使用* using *指令。不要在头文件中使用这样的指令(http://www.ddj.com/cpp/184401782) – Clifford 2009-11-05 19:47:33

回答

3

似乎没有定义bit_vector。有claims,它应包含在<vector>,但似乎并没有要在Visual Studio中2008年的情况bit_vector在第一次使用前,尝试

typedef vector<bool> bit_vector; 

0

我也看看它之前的行。编译器显然不认为bit_vector是这个声明中的一个类型,所以是的,问题可能出现在bit_vector声明中。

1

从错误消息看起来好像当编译器正在处理uitl.h时,它不知道bit_vector是什么。

您需要确保在该点之前包含任何标头声明bit_vector。您可以包括bit_vector头在util.h也可以添加适当forward声明:

class bit_vector; 
+0

没有必要在'Util.h'中包含头文件,前向声明就足够了。 – 2009-11-05 16:13:08

0

可能是编译器不知道什么是字符串。写

using std::string; 
4

默认情况下,Visual Studio 2008未定义bit_vector。

在头文件中包含以下内容:

#if _HAS_TRADITIONAL_STL 
typedef _Bvector bit_vector; 
#define __vector__ vector 
#endif /* _HAS_TRADITIONAL_STL */ 

但_HAS_TRADITIONAL_STL不似乎被默认定义。

其_Bvector的定义是:

typedef vector<bool, allocator<bool> > _Bvector; 

所以,你可以包括<矢量之前#define _HAS_TRADITIONAL_STL >或只使用矢量<布尔,分配器<布尔> >直接。

+0

好的。 --- – 2009-11-05 16:26:10

0

bit_vector不是C++标准库的一部分。这是一些较旧的非标准STL实现的一部分,虽然...

SGI的STL documentation of bit_vector说:

警告:名称bit_vector将 在未来 STL的版本中删除...未在C++标准 中定义,并且仅保留后向 的兼容性。

而且在MSDN的仅仅是一个论坛帖子通过的VC++开发人员:

bit_vector不是C++标准的正式组成部分,因此是不是在Visual C++版本的一部分。

我当然不会使用#define _HAS_TRADITIONAL_STL - 它没有记录,可能会在未来版本的Microsoft编译器中消失。