C++ c++;构建问题
我在Util.h文件中有这个方法声明C++ c++;构建问题,c++,visual-studio-2008,build,C++,Visual Studio 2008,Build,我在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"; e
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;
}
我正在使用VisualStudio2008,有人能帮我摆脱这两个错误吗!不知道位向量是否有问题!!!有什么想法吗?我还想看看前面的几行。编译器显然没有将位向量视为此声明中的一种类型,因此,是的,问题可能存在于位向量声明中。从错误消息看,当编译器处理
uitl.h
时,它似乎不知道什么是位向量
您需要确保在该点之前包含任何头声明的bit\u vector
。您可以在util.h
中包含bit\u vector
的标题,也可以添加适当的转发声明:
class bit_vector;
似乎未定义位向量。有人认为它应该包含在
中,但在VisualStudio2008中似乎不是这样。试一试
typedef vector<bool> bit_vector;
typedef向量位\向量;
在第一次使用
位向量之前,编译器可能不知道什么是字符串。写
using std::string;
默认情况下,Visual Studio 2008不定义位向量
在头文件中,它具有以下内容:
#if _HAS_TRADITIONAL_STL
typedef _Bvector bit_vector;
#define __vector__ vector
#endif /* _HAS_TRADITIONAL_STL */
但是,传统的STL似乎没有默认定义
它对_Bvector的定义是:
typedef vector<bool, allocator<bool> > _Bvector;
typedef向量_Bvector;
<> p>所以可以在定义或使用向量之前定义“yasHistalistalsSTL”。 向量不是C++标准库的一部分。但它是一些较旧的非标准STL实现的一部分
SGI的STL说:
警告:名称位_向量将为
已在的未来版本中删除
在C++标准中没有定义的STL…
并且只保留用于向后
兼容性
唯一的一件事是VC++开发人员的论坛帖子:
向量不是C++标准的官方部分,因此不是VisualC++发布的一部分。
我当然不会使用#define\u HAS_TRADITIONAL_STL
——它没有文档记录,很可能会在Microsoft编译器的未来版本中消失。没有必要在Util.h
中包含头,转发声明就足够了。在相关说明中,您可以使用std::bitset,因为它有自己的to_string()方法。不幸的是,打电话有点痛苦。有关详细信息,请参见以下内容:要使第30行正常工作,必须事先使用using指令。不要在头文件()中使用此类指令
typedef vector<bool, allocator<bool> > _Bvector;