我在Util.h文件中有这个方法声明
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 :(得分: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;
所以你可以在包含&lt; vector&gt;之前#define _HAS_TRADITIONAL_STL。或者只使用vector&lt; bool,allocator&lt; bool&gt;&gt;直接
答案 1 :(得分:3)
似乎没有定义bit_vector
。 <vector>
中应该包含claims,但在Visual Studio 2008中似乎并非如此。请尝试
typedef vector<bool> bit_vector;
在第一次使用bit_vector
之前。
答案 2 :(得分:1)
从错误消息看,当编译器正在处理uitl.h
时,它不知道bit_vector
是什么。
您需要确保在该点之前包含任何标头声明bit_vector
。您可以在bit_vector
中添加util.h
的标头,也可以添加适当的转发声明:
class bit_vector;
答案 3 :(得分:0)
我也会先看看它之前的线条。编译器显然不会将bit_vector视为此声明中的类型,所以问题可能出在bit_vector声明中。
答案 4 :(得分:0)
using std::string;
答案 5 :(得分: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编译器的未来版本中消失。