問題タブ [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.
c++ - 非テンプレート関数によって排他的に呼び出される LNK2005
タイルベースのゲーム (正方形、線など) でタイルのさまざまな形状を描画するのに役立つテンプレート関数のコレクションを含む、ShapeBuilder という名前の C++ 名前空間があります。この名前空間のすべての関数は、非テンプレート関数を作成しようとするまで、エラーなしでテンプレートを使用しました-次のような単純なもの
次のエラーが発生しました。
- WorldBuilder は名前空間 ShapeBuilder を使用します (もちろん、ShapeBuilder.h も含まれます)。
- HouseGenerator は WorldBuilder のフレンド クラスで、WorldBuilder.h を含みます。
- すべての ShapeBuilder コードは、WorldBuilder.h を含む ShapeBuilder.h に記述されています。
- 再帰的包含を防ぐために、関連するすべてのクラスで #pragma once を実際に使用しました。
トップ コードを次のコードに置き換えると、エラーが解消されます。
したがって、技術的には、すべての関数の前にテンプレート宣言を配置することもできますが、それでは地獄に落ちることは間違いありません。何が起こっているのか分かりますか?
c++ - エラー: クラス computer comp は既に computer.obj で定義されています
私は現在 C++ で遊んでおり、C++ で作成した Tic Tac Toe バッチ コンソール ゲームを再構築しようとしていますが、エラーを取り除く方法がわからない壁にぶつかっていますTicTacToe.obj : error LNK2005: "class computer comp" (?comp@@3Vcomputer@@A) already defined in computer.obj
。関数 computer の宣言をヘッダーから削除し、C++ で関数の定義を削除しようとしましたが、エラーは修正されませんでした。このエラーを削除する方法を見つけた唯一の方法は、オブジェクト名を削除することでした。これは、私がやりたくないことです。Web サイトhttp://www.cplusplus.com/doc/tutorial/classes/にある例を使用して、クラス コンピューターをセットアップしました。C++ についてもっと知りたいと思っているので、現在発生しているエラーや不要な関数について提供できる情報は、大歓迎です。
コード:
TicTacToe.cpp
コンピューター.cpp
computer.h
追加情報:
Windows 7 を実行しているラップトップで Microsoft Visual Studio Professional 2013 を使用しています。
c++ - LNK2005、C++/CLI、わかりません
私は純粋な C++ コードを持っています。Dictionary と Training の 2 つのクラスがあります。これらのクラスを使用して WinForms プロジェクトを作成したいと思います。したがって、2 つのフォームがあり、グローバル変数のようにクラス メンバーを両方で共有する必要があります。MyForm.h の一部として、そのようにしようとしました。
いくつかのイベントがあります:
2 番目のフォームの一部:
すべてのヘッダーで、#ifndef または #pragma を 1 回使用していますが、依然として奇妙な LNK2005 エラーが発生します。
完全なコード:
MyForm.h : https://codeo.me/5mO
ExploreForm.h : https://codeo.me/5mI
globals.h: https://codeo.me/5mJ
globals.cpp: https://codeo.me/5mK
Dictionary.h: https://codeo.me/5mL
MyForm.cpp: https://codeo.me/5mP
2 つのフォーム間でネイティブ C++ クラス メンバーを共有するにはどうすればよいですか? lnk2005 について多くの質問があることは承知していますが、何かアイデアはあります。
c++ - C++ クラス: 概念クラス ドッペルゲンガー: LNK2005
おいおい。クラスを定義するときに悪名高いLNK2005
エラーに遭遇しましたが、問題を特定できないようです。
(組織をよく反映するために、私の同様に悪名高いシングルトンを引き裂いています。)最初のシングルトンは... ...非常に分岐した、素晴らしい方法で... C++ OPPの原則をすべて回避するようにコーディングされました当時は知らなかったコンセプトですが、うまくいきました!....何とかして。最も単純な C++ の概念のまぐれではありますが。高速に動作させるには、編成、コンパイル速度、および高度な構造化手法が必要です。
A-とにかく。それを分割し、いくつか書き直さなければならなかった後、私は必要性に気づきました。複数の.cpp
ファイルを宣言する必要があるのは、単純に、二重宣言と通常のヘッダー クラス定義によってコンパイラが非常にイライラするからです。
さらに、必要に応じてプリプロセッサ ディレクティブを使用しました。しかし、まだ何かが間違っています。
注(編集):エラーが発生するように質問を書き直しました。
検討:
D3D.h
...とWindows.h
ついに、Infinity.h
すべての実装はそれぞれの .cpp ファイルにあります。その上#pragma
、私は使用しました#ifndef
... #endif
. ヘッダー ファイル内のクラスを自動初期化することによって、ある種の実装をうっかり呼び出しているのではないかと思います。しかし、それは非常にコーシャに見え、関数メンバーを次のように宣言できます。
Direct3D.D3D_Start()
静的メンバーを指定せずに、Direct3D::D3D_Start()
. ヘッダーはすべて静的にする必要がありますか?
編集:以下、.cpp
ファイル:
* .cpp
Niall のソリューションを表示するように変更された更新。編集:
質問:
Stack Overflow question の解決策を考慮して、ヘッダーファイルでクラスを自動初期化したため、LNK2005の問題が発生していますか?
#pragma once および #ifndef の使用中に VS 2010 C++ LNK2005 エラーが発生する
私のソリューションの理解に基づいて、これはうまくいかないようです。
コンパイラ
VS2013 の戻り値:
Error 1 error LNK2005: "class Direct3D Direct3D" (?Direct3D@@3V0@A) already defined in Direct3D.obj C:\Users\InfinityMachine\documents\visual studio 2013\Projects\Win32Project3\Win32Project3\Win32Project3.obj Win32Project3
Error 2 error LNK2005: "class Windows Windows" (?Windows@@3V0@A) already defined in Win32Project3.obj C:\Users\InfinityMachine\documents\visual studio 2013\Projects\Win32Project3\Win32Project3\Windows.obj Win32Project3
Error 3 error LNK1169: one or more multiply defined symbols found C:\Users\InfinityMachine\documents\visual studio 2013\Projects\Win32Project3\Debug\Win32Project3.exe 1 1 Win32Project3
c++ - C++ - 別ファイルの構造体
私は MVS 2013 を使用しており、ファイル ListStruct.h に構造体を書きました。リンク中にエラー LNK2005 が発生します。
現在 - ListStruct.h の一部
私のメインの一部:
私は何を間違っていますか?ListStruct.cpp ファイルを作成する必要がありますか? どのように見えるはずですか?
c++ - リンカー エラー: comsupp.lib および comsuppwd.lib
エラーは次のとおりです。
エラー 14 エラー LNK2005: "void __stdcall _set_com_error_handler(void (__stdcall*)(long,struct IErrorInfo *))" (?_set_com_error_handler@@YGXP6GXJPAUIErrorInfo@@@Z@Z) comsupp.lib(comsupp.obj) comsuppwd で既に定義されています。ライブラリ
以前に誰かがこれに遭遇しましたか?