Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;构建问题_C++_Visual Studio 2008_Build - Fatal编程技术网

C++ c++;构建问题

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

我在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;
}

我正在使用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;