問題タブ [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.
c++ - 複数のソースでのテンプレートの実装
テンプレートの宣言と実装を分離するために、次のパターンを使用しています。
decl.h (宣言)
impl.cpp (実装)
今、Fooに新しいメソッドを追加したいのですが、impl.cppファイルはすでに巨大なので、別のファイルimpl2.cppに移動したいです。
decl.h (宣言)
impl.cpp (実装)
impl2.cpp (実装)
ここでの主な懸念はインスタンス化の重複です。どうすればそれらを回避できますか?
c++ - クラスから名前空間への g++ での最初の定義
私はこのような多くの質問を読みましたが、私の質問が違うかどうかは 100% わかりません。私は正しい答えをかなり探しましたが、ほとんどの答えはマクロガードに関するものでした. から派生したカスタム文字列クラスがstd::string
あり、後でそのプロジェクトを実際の世界で使用していたので、機能を拡張するためだけに std::string を派生させたくありませんでした。そこで、関数を customString.h から utils_string.h に移動しました。定義は次のとおりです。
そして、私は文句を言います.これ...first defined here
はコンパイラからの正確な出力です. 注:ここにはクラスがありません
/tmp/ccCFVTXP.o: 関数内
utils::string::tolower(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)': listings.cpp:(.text+0x0): multiple definition of
utils::string::tolower(std::basic_string, std::allocator >&)' /tmp/cczDtRdT.o:listing.cpp:(.text+0x0): 最初に定義ここで /tmp/ccCFVTXP.o: 関数内utils::string::iequals(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': listings.cpp:(.text+0x55): multiple definition of
utils::string::iequals(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)' /tmp/cczDtRdT.o: list.cpp:(.text+0x55): ここで最初に定義 /tmp/ccCFVTXP.o: 関数内utils::string::ilike(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': listings.cpp:(.text+0x118): multiple definition of
utils::string::ilike(std::basic_string, std::allocator > const&, std::basic_string, std: :allocator > const&)' /tmp/cczDtRdT.o:listing.cpp:(.text+0x118): ここで最初に定義 /tmp/ccCFVTXP.o: 関数内utils::string::prependAndAppendILikeDelimiter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': listings.cpp:(.text+0x484): multiple definition of
utils::string::prependAndAppendILikeDelimiter(std::basic_string, std ::allocator > const&)' /tmp/cczDtRdT.o:listing.cpp:(.text+0x484):ここで最初に定義された /tmp/ccifZISK.o: 関数内utils::string::tolower(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)': match_count.cpp:(.text+0x0): multiple definition of
utils::string::tolower(std::basic_string, std::allocator >&)' /tmp/cczDtRdT.o:listing.cpp:(.text+0x0): 最初にここで定義 /tmp/ccifZISK.o: でfunctionutils::string::iequals(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': match_count.cpp:(.text+0x55): multiple definition of
utils::string::iequals(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)' /tmp/cczDtRdT.o:listing.cpp:(.text+0x55 ): ここで最初に定義 /tmp/ccifZISK.o: 関数内utils::string::ilike(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': match_count.cpp:(.text+0x118): multiple definition of
utils::string::ilike(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)' /tmp/ cczDtRdT.o:listing.cpp:(.text+0x118): ここで最初に定義 /tmp/ccifZISK.o: 関数内utils::string::prependAndAppendILikeDelimiter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': match_count.cpp:(.text+0x484): multiple definition of
utils::string::prependAndAppendILikeDelimiter(std::basic_string, std::allocator > const&)' /tmp /cczDtRdT.o:listing.cpp:(.text+0x484): ここで最初に定義された collect2: ld は 1 つの終了ステータスを返しました
混乱して申し訳ありませんが、同様の問題に遭遇した人のために何も見逃したくありませんでした.
もう一つ; ここでは、match_count.cpp * listing.cpp * およびListings.cpp と表示されており、::utils::string::function() で定義されている関数を使用しているだけです。
c++ - 1つ以上の複数定義されたシンボルがwinformvc++アプリケーションでエラーを検出しました
私はVC++でフォームアプリケーションを使用しています。メインフォーム、つまりForm1.hと、child.hという名前の子フォームがあります。form1.hのボタンクリックでchild.hフォームを呼び出しています。child.hを呼び出すには、Form1.hにChild.hを含める必要があります。
Form1.hで次のコードを使用しました
そしてChild.hでは私はいくつかの処理を行っています。このために、関数名とグローバル変数名を持つparam.hという名前のヘッダーファイルを1つ作成しました。Child.hファイルにparam.hを含めました。
そしてparam.hは
child.hを含めた後エラーが表示されています
なぜこれらのエラーが発生するのかわかりませんが、これらのエラーを解決するための解決策を教えてください。
前もって感謝します
c++ - グローバル スコープで宣言中に名前空間エラーが発生しました
Test.h 、 Test.cpp 、 main.cpp の 3 つのファイルがあります。
Test.h
テスト.cpp
メイン.cpp
ビルド中に次のエラーが発生します..
できるだけ早く助けてください..
c++ - ヘッダー ファイルのインクルード ループと複数の定義
私は、「bh」などutil.h
で使用される関数を含み、互いに定義されたいくつかのクラスにアクセスするために互いにインクルードします。a.h
a.h
b.h
私の問題は、 のmultiple definition
エラーが発生したことですfoo
。どのように?
a.h
問題は、 includesutil.h
とb.h
、 and b.h
includesutil.h
がもう一度あることだと思ったので、複数の def エラーが発生しました。しかし、私はガードutil.h
を書いたので、それは意味をなさないようです.#ifndef/#define
誰でも私を助けてくれます、ありがとう。
c++ - QtCreator の複数定義ビルド バグ
これは私の .pro ファイルです:
何らかの理由で、QtCreator は .cpp ファイルから .o ファイルを構築するときにソース フォルダー構造を尊重しません。両方のファイルが「shadow_build_directory/file.o」にコンパイルされます。ビルド プロセスがシャドウ ビルド ディレクトリに path1 および path2 ディレクトリを作成し、"path1/file.cpp" を "shadow_build_directory/path1/file.o" に、"path2/file.cpp" を "shadow_build_directory/path2/" にコンパイルすることを期待します。 file.o".
両方のソースからコンパイルされたシンボルが file.o に追加されるため、まだそれほど大きな問題ではありません。QtCreator がリンクしようとすると、大きな問題になります。
QtCreator は file.o を 2 回リンクするため、リンカーは複数の定義エラーで失敗します。
QtCreator がソース ディレクトリ構造を反映するオブジェクト ファイルにコンパイルされることを確認するにはどうすればよいですか?
ありがとう
編集:
path1/file.cpp
path2/file.cpp
QtCreator によるビルド プロセス:
c - cant re-def enum type def
booltypedefのコードがあります
2つのヘッダーファイルで、最終的な親ヘッダーファイルに含まれていない場合、子Cファイルはもちろんbool型を使用できませんが、それを定義するより小さなヘッダーファイルの子は使用できます。
ただし、最終的な親ヘッダーファイルで定義すると、「boolは現在のスコープですでに宣言されています」というより少ないヘッダーファイル定義エラーが発生します。
ブール値がすでに定義されている場合とされていない場合があるプロジェクトに含まれている可能性がある、より少ないヘッダーのソリューションが必要です...これを行うための最良の方法は何ですか?
Ta
c++ - 関数エラー/ヘッダーファイル/インライン化の多重定義
これが重複している場合は申し訳ありませんが、私が見つけたもの...まあ、同じ解決策を試したと思いましたが、役に立ちませんでした。とにかく、私は最近、一般的に使用されるランダム関数の実装を単一のヘッダー ファイルに移動しようとしました。関数がどのように機能するかは知っていますが、すぐに変更することはないので、ファイルが少ないほど良いと考えました (そして、関数はかなり短いです)。
それで、私はそれを試しました。.cpp ファイルの内容を新しいファイルに貼り付け、ガードを追加しました。次に、それを含めるだけで、出来上がりです。残念ながら、それを 2 回含めたところ、同じ関数のコピーをすべてのファイルに配布していたため、エラーが発生しました。(とにかく 1 つのコピーになってしまうため、なぜそれがヘッダー ガードにあるのか、まだ少し混乱していますが、そうなっていると思います)。とにかく、私はググって(そしてSO'ed)、それらをインラインとして宣言した場合(この状況では理にかなっています)、プリプロセッサ(またはリンカでもありますか?)がそれを正しく行うことを発見しました。考えてみると...小さな質問として、DEFINESはファイルに対してローカルですか、それともスコープ内でグローバルですか? (つまり、定義するヘッダー ガードを使用して 2 つのファイルにヘッダーをインクルードする場合、定義が異なるファイルで発生したため、両方のファイルにそれをインクルードしますか? それとも一度だけ?それが2回含まれていた場合、同じ関数/クラス/構造の複数の宣言を取得します(定義はしません)。これはエラーをスローすると思いましたが、別のファイルには含まれていないと思いますか? ただし、それ以外の場合は、含まれていない可能性があり、それが何であるかを認識できません。もう一度質問しますが、DEFINES はファイルに対してローカルですか? )
これは、関数が重複するファイルにあるものです(1つの関数しか含まれていないと考えられていました)
次に、このファイル (「random.h」) の 2 つのファイルに #include を含めるだけです。
私は何が欠けていますか?
編集:エラーメッセージは:
`randomRange(int const&, int const&)' の多重定義 |
少し休憩している間に、IDE を閉じていました。再開すると、すべてが修正されました。明らかに、インライン DID を追加すると修正されますが、実行時の cpp ファイルとは異なり、ヘッダー ファイル (プロジェクトに追加されていない場合) は、手動で保存しない限り更新されません。保存したら動作しました。すみません、皆さん。
今日の教訓: このようなエラーを修正するときは、ファイルが更新されていることを確認してください...
c - ビルド エラー: 複数の定義
実際にはttfフォントファイルであるunsigned char配列を含むヘッダーファイルがあります。.c ファイルでは、フォントを読み込んで使用できます (.c ファイルに ttf ヘッダー ファイルを含めます) が、これを別の c ファイルで使用しようとすると、これらの 2 つのエラーのいずれかが表示されます。
配列が宣言されていないという最初のエラー。
したがって、配列を含むヘッダー ファイルをインクルードすると、2 番目のエラーが発生します。... の複数定義
誰かが助けることができますか?理解できない。説明が明確であることを願っています。おおよその英語で申し訳ありません:)
c - Mingw64の複数の定義
コードブロックideを使用して、Windows7x64マシンでmingw64を使用してかなり大きなc-projectをコンパイルしようとしています。このチュートリアルに従ってコンパイラのセットアップを行いました:http: //blog.marc-o.org/2010/mingw64-unter-windows-mit-codeblocks
今、私はあらゆる種類の標準関数の複数の定義エラーを受け取ります。ここを参照してください:
等々。誰かが私が欠けているものの手がかりを持っていますか?
PS:mingw32バージョンは問題なくコンパイルされます。