0

タイトルが足りなくて申し訳ありませんが、何が起こっているのか本当にわかりません。関数と変数を2回宣言しているようです。たぶんどこかに2回含めていますが、プロジェクトは本当に小さく、どこに含まれているのかわかりません。

私のコードはこのgithubリポジトリにあります。私がするとき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 ソースファイルで使用されています。

4

3 に答える 3

3

これがあなたの問題の1つです:

定義

hash_table_t trans;

ヘッダーファイルに表示されます。ヘッダーはそれらを使用して各コンパイル単位に複製されるため、同じ名前の複数の変数が作成されます。これにより、リンカー エラーが発生します。

修正は言うことです

extern hash_table_t trans;

ヘッダーで、および

hash_table_t trans;

正確に 1 つのソース ファイルで。

同様のアプローチは、他のエラーに対しても機能します。

于 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 に答える