0

对不起,蹩脚的标题,但我真的不知道发生了什么。它似乎是在声明一个函数和一个变量两次。也许我在某个地方包含了两次,但这个项目真的很小,我找不到它包含在哪里。

我的代码在这个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

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

更新

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

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

hash_table_t trans;

trans 正在源文件中使用。

4

3 回答 3

3

这是您的问题之一:

定义

hash_table_t trans;

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

解决办法是说

extern hash_table_t trans;

在标题中,并且

hash_table_t trans;

在一个源文件中。

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

于 2012-11-07T04:36:47.763 回答
1

如果你inline在第 35 行创建这个函数hashTable.h

stored_info_t lookup() {
  return NULL;
}

它应该摆脱错误。

于 2012-11-07T04:40:02.417 回答
0

或者您可以将其包装在命名空间周围以创建静态上下文,如下所示

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

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

于 2012-11-07T04:41:08.890 回答