C ++错误“将'string'重新定义为不同类型的符号”

时间:2014-02-27 05:15:21

标签: c++

我声明了一个在read_qacct.h中返回std :: string的函数

#include <string>
std::string read_qacct(std::string login, int days);

然后我将read_qacct.h包含在另一个名为db2class.cpp

的cpp文件中
#include "read_qacct.h"

当我编译db2class时,第一个错误是

In file included from db2class.cpp:8:
./read_qacct.h:2:6: error: redefinition of 'string' as different kind of symbol
std::string read_qacct(std::string login, int days);
     ^
/usr/include/c++/4.2.1/bits/stringfwd.h:59:33: note: previous definition is here
  typedef basic_string<char>    string;

我在read_qacct.cpp中以read_qacct.c中包含了read_qacct,其中定义了函数read_qacct。我成功编译了read_qacct.cpp。为什么我的db2class.cpp会出现这个奇怪的错误?

1 个答案:

答案 0 :(得分:0)

你很可能忘了保护你的一个标题。确保用警卫包围标题以防止重新定义:

#ifndef FILENAME_H
#define FILENAME_H

<content here>

#endif

这些if语句由预处理器评估。它基本上确保仅在首次包含文件时处理警卫之间的代码,考虑到FILENAME_H(其中FILENAME可以是任何唯一的,不一定是文件名)尚未定义(“ifndef”,如果未定义)。但是,在下一个包含时,_FILENAME_H已经定义,导致预处理器跳过#if语句中的所有内容。