我声明了一个在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会出现这个奇怪的错误?
答案 0 :(得分:0)
你很可能忘了保护你的一个标题。确保用警卫包围标题以防止重新定义:
#ifndef FILENAME_H
#define FILENAME_H
<content here>
#endif
这些if语句由预处理器评估。它基本上确保仅在首次包含文件时处理警卫之间的代码,考虑到FILENAME_H(其中FILENAME可以是任何唯一的,不一定是文件名)尚未定义(“ifndef”,如果未定义)。但是,在下一个包含时,_FILENAME_H已经定义,导致预处理器跳过#if语句中的所有内容。