对不起蹩脚的头衔,但我真的不知道发生了什么。它似乎是声明一个函数,一个变量两次。也许我在某个地方包括它两次,但项目非常小,我无法找到它包含在哪里。
我的代码在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
正在源文件中使用。
答案 0 :(得分:3)
这是你的一个问题:
定义
hash_table_t trans;
出现在头文件中。由于标题使用它们复制到每个编译单元中,因此最终会有多个具有相同名称的变量。这会导致链接器错误。
修复就是说
extern hash_table_t trans;
标题中的和
hash_table_t trans;
只有一个源文件。
类似的方法适用于您的其他错误。
答案 1 :(得分:1)
如果您在inline
hashTable.h
stored_info_t lookup() {
return NULL;
}
它应该摆脱错误。
答案 2 :(得分:0)
或者你可以将它包装在名称空间周围以创建一个静态上下文,如此
namespace{
hash_table_t trans;
stored_info_t lookup() {
return NULL;
}
}
注意,如果可能,你应该避免使用全局变量。