問題タブ [multiple-definition-error]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
960 参照

mingw - main.cpp 内のすべての関数の複数定義

.h と .cpp はすべてhttp://code.google.com/p/asmlib-opencv/からのものです。

彼の demo/main.cpp を使用しようとしていますが、必要なすべての .h を含めました。問題は、main.cpp のすべての関数に「複数の定義」があることです。プロジェクトを検索しましたが、他の場所では定義されていません。.h は #ifndef/#define で保護されています。それらが他の場所で定義されているかどうかを確認しました。複数回含まれているファイルがあるかどうかを検索しました。

Win7でMingw 4.8.1でQt 4.74を使用しています


エラー/警告

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:197: 警告: >target debug/main.o' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\Makefile.Debug:147: warning: ignoring old commands for >targetdebug/main.o' のコマンドをオーバーライドしています

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数Z13buildASMModelRN9StatModel8ASMModelESsSsSs': c:\OpenCV2.3.1\QtBuild\install\include\opencv2\core\mat.hpp:58: multiple definition of内 buildASMModel(StatModel::ASMModel&, std::string, std::string, std::string)' D:\Ptixiaki\ test\QtTest\ASMLIBDEMO\main.cpp:24: エラー: 最初にここで定義

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数Z12readASMModelRN9StatModel8ASMModelESs': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:31: multiple definition of内 readASMModel(StatModel::ASMModel&, std::string)' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp: 31: エラー: ここで最初に定義されました

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数Z12searchAndFitRN9StatModel8ASMModelERN2cv17CascadeClassifierERKSsi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:40: multiple definition of内 searchAndFit(StatModel::ASMModel&, cv::CascadeClassifier&, std::string const&, int)' D:\Ptixiaki\test\ QtTest\ASMLIBDEMO\main.cpp:40: エラー: 最初にここで定義

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数Z11asmOnWebCamRN9StatModel8ASMModelERN2cv17CascadeClassifierEi': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:64: multiple definition ofasmOnWebCam(StatModel::ASMModel&, cv::CascadeClassifier&, int) 内' D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main. cpp:64: エラー: ここで最初に定義された

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数Z8showHelpv': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: multiple definition ofshowHelp() 内 D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:93: エラー: 最初にここで定義

D:\Ptixiaki\test\QtTest\ASMLIBDEMO\debug\main.o:-1: 関数main': D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: multiple definition ofmain' 内 D:\Ptixiaki\test\QtTest\ASMLIBDEMO\main.cpp:120: エラー: 最初にここで定義

:-1: エラー: collect2: ld が 1 つの終了ステータスを返しました

コード

0 投票する
3 に答える
260 参照

c++ - C での C++ からのテンプレート


C で C++ 標準ライブラリからいくつかのクラスを再作成しようとしています。たとえば、std::pair クラスです。
テンプレートをエミュレートするために、もちろんマクロを使用しました。以下に例を示します。

この構造を複数のソース ファイルで使用しようとすると、コードを複数回生成する必要があります。それは明らかに、エラーにつながります。

これを修正して、これらの「テンプレート」を C で使用できるようにする方法はありますか?

0 投票する
1 に答える
1384 参照

c - C および CUDA-C コードの NVCC リンク エラー

私は DNA フラグメント アセンブリ プログラムに取り組んでいます。CPU のみのバージョンは GCC を使用して C 言語でビルドされており、NVCC を使用して GPU バージョンをビルドしようとしています。

ここにメイクファイルがあります

ご覧のとおり、元のファイルは、正しくコンパイルする.cために .cu ファイルになりました。nvccすべての cu ファイルには、対応するファイル (Common.cu の Common.h など) が含まれていますmain.cu

ILS.h には、グローバル変数の定義が含まれp_instanceFragmentsており、p_instanceLength

問題は、NVCC をコンパイルするときに、不明な理由で次のエラーが発生することです。

同じコードが GCC を使用して正しくビルドされるため、実際の複数の定義はありません。と によって、ILS.hが nvcc に 2 回含まれているように見えます。複数のインクルードと無限のインクルード ループを避けるために、すべてのヘッダー ファイルをステートメントでラップしたため、これも不可能です。ILS.cuConsensus.cu#ifndef .. #define .. #endif

多分makefileコマンドで何か?または、リンクにgccを使用する必要がありますか? 対処方法を教えてください。

よろしく、

0 投票する
1 に答える
398 参照

c++ - 異なるソース ファイルで宣言された同じ名前のクラスのコンパイラ/リンカー エラーなし

以下のように、同じ名前を宣言する 2 つのファイルがありますclass C

g++ C1.cpp C2.cpp!で正常にコンパイルされます。

  1. 名前だけが同じ で本体が同じではない場合、コンパイラ/リンカー エラーが発生しないのはなぜですか?
  2. と非静的バージョンC::foo(..)の両方で、 なぜ serve の定義が 1 つなのですか?static
  3. または、これがコンパイラの別の未定義の動作ケースである場合、それを防ぐことはできますか?
0 投票する
1 に答える
1514 参照

c++ - D ライブラリを C++ コードにリンクする

最近、私は美しい言語 D を学びました。D はより柔軟で、安定した高速プログラムを作成するのに役立ちます。しかし、人気はありません... Dで書かれたコードはほとんどなく、CとC++で書かれたコードが多いためです。したがって、Andrei Alexanderscu の本を読んだ後、著者が D ライブラリの C++ コードへのリンクに関する質問を非常に表面的に説明した後、私はそれを自分で学び、AutomataInterface を実装する CompleteAutomata クラスのインスタンスを返す関数が定義されている D にいくつかのコードを書きました。 C++ コードで:

関連する D コード:

コードを記述した後、次のフラグを使用して、 2 つの異なるコンパイラ (dmdおよび)で D ライブラリをコンパイルしました。gdc

また

ライブラリディレクトリへのパスを追加し(-Lオプション)、ライブラリを直接追加する(オプション)ことにより、受け取った各ライブラリをQtプロジェクトにリンクしようとすると-l。どちらの場合もエラーが発生しました。

最初のdmdケースでは、「`_d_newclass' への未定義の参照」と別のエラーがいくつかあります。

2 番目のケース (を使用する場合gdc) では、「の複数定義」に関するメッセージが表示されます。

そうしようと2日間試みた後...

最近、Phobos (D 標準ライブラリ) をリンク プロセスに追加しようとしています。dmd-lphobos2 フラグの場合と-lgphobos2gdcフラグの場合は対応しています。しかし、それは私を助けません...

dmdリンカー出力を使用する場合:

libcurl-gnutls: の代わりに試してみましたln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4。次に、libcurl-gnutls に関するメッセージなしで同じリンクを作成した結果。

リンカー出力を使用する場合gdcは、「複数の定義」について再度話します。

最後に librt.so.1 に関するメッセージが表示されます。/usr/lib64 を調べたところ、ライブラリ ファイルが表示されました。

D ライブラリーを C++ コードに接続する方法を教えてください。

0 投票する
1 に答える
1248 参照

c++ - テンプレートを使用した c++ 複数定義エラー

私はテンプレートベースのプログラミングに慣れていないので、プロジェクトをコンパイルするときにこのエラーが発生します

指定されたコードは完全に .h ヘッダー ファイル内にあります。この問題を解決するための指針は非常に高く評価されています。

コード:

0 投票する
3 に答える
6586 参照

c++ - 複数のC++ファイルで「複数定義」エラーが発生しますか?

初めて 1 つのプロジェクトで複数の C++ ファイルを使用しています。両方とも、保護された (#ifndef) ヘッダー ファイルを含める必要があります。ただし、それを行うと、複数定義エラーが発生します。

私が持っているのは、ヘッダーを直接呼び出す2つの.cppファイルと、間接的に1つ(別のインクルードに含まれています)、そしてそれを含む他の2つのヘッダーファイルです。

では、エラーを取り除くために何をする必要がありますか?

エラー:

obj\Debug\main.o||関数Z14sortLibQtyTest4BookS_':| [PATH]\miscFuncs.h|16|multiple definition ofで sortLibQtyTest(Book, Book)'

コード:

問題を引き起こしているのはこれだけではなく、おそらく 10 以上の問題があり、中にはそれほど短くて甘くないものもあります。また、関数は複数のファイルで必要です。

0 投票する
3 に答える
99 参照

c++ - ファイルを含めると、グローバルの複数の定義エラーが発生する

ファンキーな複数定義エラーが発生します。インクルード構造は次のとおりです。

メインには、バックエンドを含む vm が含まれます。

バックエンドに3 つのグローバルchar *ポインターがあり、複数の定義エラーが発生するのはメンバーです。

vm.cppmain.cppおよびmoc_vm.cpp(Qtを使用しています)で複数の定義を取得します。

残りのソースでポインターを外部として宣言しようとしましたが、役に立ちませんでした。すべてのプリプロセッサ ガードが配置されていますが、明らかに 1 か所でしか定義されていないため、なぜエラーが発生するのかわかりません...

何か案は?

編集:これは奇妙です。BACKEND を MAIN に含めることができ、問題はありません。チェーンが MAIN>VM>BACKEND の場合にのみ、エラーが発生します。