构建的c ++问题

时间:2009-11-05 16:04:50

标签: 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";
    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是否有问题!!!任何想法???

6 个答案:

答案 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编译器的未来版本中消失。