在c ++中双重包含库的神秘错误

时间:2012-11-07 04:32:38

标签: c++ include

对不起蹩脚的头衔,但我真的不知道发生了什么。它似乎是声明一个函数,一个变量两次。也许我在某个地方包括它两次,但项目非常小,我无法找到它包含在哪里。

我的代码在github repo中。当我做make时,这是输出:

g++  arbolesJuego.cpp main.cc  -o othello
/tmp/ccwVFD8e.o: In function `lookup()':
main.cc:(.text+0x0): multiple definition of `lookup()'
/tmp/cc3YvuYq.o:arbolesJuego.cpp:(.text+0x0): first defined here
/tmp/ccwVFD8e.o:(.bss+0x0): multiple definition of `trans'
/tmp/cc3YvuYq.o:(.bss+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [all] Error 1

为什么会这样?任何帮助将不胜感激!

更新

因为,提供的链接是一个回购,它会得到改进(我希望hehehe),我接下来粘贴错误的代码:

stored_info_t lookup() {
  stored_info_t info;
  return info;
};

hash_table_t trans;

trans正在源文件中使用。

3 个答案:

答案 0 :(得分:3)

这是你的一个问题:

定义

hash_table_t trans;

出现在头文件中。由于标题使用它们复制到每个编译单元中,因此最终会有多个具有相同名称的变量。这会导致链接器错误。

修复就是说

extern hash_table_t trans;
标题中的

hash_table_t trans;

只有一个源文件。

类似的方法适用于您的其他错误。

答案 1 :(得分:1)

如果您在inline

的第35行执行此功能hashTable.h
stored_info_t lookup() {
  return NULL;
}

它应该摆脱错误。

答案 2 :(得分:0)

或者你可以将它包装在名称空间周围以创建一个静态上下文,如此

namespace{
    hash_table_t trans;
    stored_info_t lookup() {
      return NULL;
    }
}

注意,如果可能,你应该避免使用全局变量。