問題タブ [lnk2005]

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 投票する
3 に答える
1111 参照

c++ - Include guards not working? (500 errors of type LNK2005 x already defined in y.obj)

I have a big project (400 files) and all of the headers have include guards and everything, however I get 500 LNK2005 errors.

Could it be that I have function bodies defined in some headers? Cause I saw the same things in the DirectX utility headers(DirectXCollision has some of it's functions are completely in the header).

Or could it be because they are using .inl files instead of .cpp?

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

c++ - 名前空間とインクルードはリンク エラーを生成します

lnk2005 エラーが発生したとき、名前空間をいじっていました。エラーを回避する方法がわかりません。エラーは次のとおりです。

これがコードです...

Chart.h

フー。

Chart.cpp

ソース.cpp

#include "Chart.h" を Source.cpp から削除すると、問題はなくなります。ただし、Source.cpp には名前空間の定義に #include "Chart.h" が必要です。

すべてがコンパイルされるように、Chart.cpp と Source.cpp の両方で「namespace Chart」が必要であることを表現する正しい方法は何ですか?

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

visual-studio-2010 - ランタイムライブラリ(/ MD)が一致しているにもかかわらずLNK2005エラー

VS2010で、C#プロジェクトとC++プロジェクトの両方を含むCLI/C++ソリューションでOFELIライブラリを使用しようとしています。つまり、UIはWPFで記述され、計算はCLR対応のC++で行われます。

OFELIソースをダウンロードし、ソリューションをVS2010形式に変換して、静的ライブラリを正常にビルドできました。ただし、lib(ofeli-debug.lib)にリンクすると、多数のLNK2005エラーが発生します。

プロジェクトと同じように、libが/MDd設定でビルドされるように注意しました。msvcprtd.libを無視するようにプロジェクトを設定すると、予想どおり、多数のLNK2019エラーが発生します。

実験の結果、CLR以外のC++テストプロジェクトからofelilibを正常にリンクして使用できることがわかりましたが、CLRが有効なプロジェクトからはできません(ofeliがCLRサポートを有効にしてコンパイルされている場合でも)。

私のCLRプロジェクトで多くのLNK2005エラーが発生して失敗する単純なコードスニペットを以下に示します。

私は何が欠けていますか?

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

c++ - LNK2005 関数ポインター配列は、.obj で "既に定義されています"

問題の紹介: Windows 7 - 64 ビット OS で実行されているVisual Studio 2012のC++/DirectX11でレンダリング エンジン (32 ビット モードでコンパイル) に取り組んでいますが、奇妙なリンク エラーが発生します。私のクラス ( Entity3Dは、シーンの基本的な俳優のようなものです)。 すべてのバウンディング ボリューム クラスはShape3Dクラスから継承します。各エンティティにはShape3D * boundingVolume メンバがあり、初期化時に特定のシェイプ タイプに初期化されます。2 つのShape3Dの 間で衝突するとき、関数を介してそれらを渡します。関数はそれらのタイプをチェックします( SphereEntity

bool Intersect(Shape3D* a, Shape3D* b)/*Box*/Whatever) であり、型は関数ポインターの配列内の関数のインデックスである数値を表します。

つまり、仮想ディスパッチのようなものです。わかりましたので、InersectArray関数の配列(Intersect.hで宣言されています)であり、それがリンクエラーを引き起こします:

Intersect.hはEntity3D.cpp にのみ含まれ、Entity3D.hには含まれず、 Entity3D.hに含まれるヘッダーにも含まれませEntity3D.cppにはEntity3D.hIntersect.hのみが含まれています。クリーンアップして再構築しましたが、エラーが続きます。Intersect(Shape3D a, Shape3D* b)* は、Entity3D.cppファイル内のEntity3Dの 1 つのメソッドでのみ呼び出されます。現在、プロジェクトに他のコンパイル エラーや警告はありません。他に何がそのような問題を引き起こす可能性がありますか?

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

c++ - Boost 1.53 にリンクしようとするとエラー LNK2005 が発生する

現在、boost lib にリンクしようとしています。

このコマンドラインから作成されます

しかし、次のリンケージエラーが発生します(他の多くのエラーの1つ):

このエラーについて詳しく知るために、リンカの詳細度を上げました。これが得られる結果です。

すべてのブースト ライブラリが、MSVCP90D.dll から std::string 関数をインポートしようとしているようです。

私自身のプログラムは std::string コードを埋め込んでいるように見えるため、内部的にリンクしようとします。

ここでは 2 つの選択肢があると思います。ブーストを埋め込み std::string コードにするか、ブーストと私のプログラムが両方の obj で同じ宣言を持ち、リンケージを達成できるようにします。私のプログラムは、ブーストと同じ方法で MSVCP90D.dll から std::string コードをインポートする必要があります。

問題は、std::string コードをインポートせずにブーストにコンパイルを依頼する方法がわからないことです。そして、プログラムに MSVCP90D.dll から std::string を強制的にインポートする方法がわかりません。誰かアイデアがありますか?

私のプログラムは明らかに /MDd オプションでコンパイルされていると言わざるを得ません。Boost は、このオプションを使用して、 runtime-link=shared行でコンパイルする必要もあります。

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

c++ - LNK2005、LNK1169 エラー、「int __cdecl g(void)」(?g@@YAHXZ) は既に定義されています

Visual Studio プロジェクトに 3 つのファイルがあります:test.cppと-date.cppmain.cpp

test.cpp:

日付.cpp:

main.cpp:

ヘッダーファイルで関数を定義すると、ヘッダーファイルが複数回呼び出されると、一定義規則違反になることを理解しています。ただし、ここでは、1 つのファイル/翻訳単位から 1 回だけ呼び出しています。なぜまだ LNK2005 を投げているのですか?

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

c++ - グローバル関数が含まれている場合の c++ エラー lnk2005

私は dll プロジェクトに取り組んでいますが、グローバル関数と構造体を含む新しい .h を追加するまではうまく機能していました。その後、コンパイル (またはリンク) が失敗しました。

エラーメッセージは次のとおりです。

追加しまし"#pragma once"たが、問題はまだあります。

この問題を解決するには?

ありがとう!