[解決済み] 既に.objで定義されている-二重包含はない
質問
already defined in .obj というエラーが発生しました。これは私のプロジェクトの構造です。
main.cpp
#include "main.h";
main.h
#include <iostream>
#include <string>
#include <sstream>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include "client.cpp"
クライアント.cpp
#ifndef SOCKET_CLIENT_CLASS
#define SOCKET_CLIENT_CLASS
#ifndef BOOST_ASIO_HPP
#include <boost/asio.hpp>
#endif
/*CLASS DEFINITION HERE*/
#endif
これは、コンパイラが文句を言っているところです。
main.obj : エラー LNK2005: "public: bool __thiscall SocketClient::read (int,char *)" (?read@SocketClient@QAE_NHPAD@Z) すでに定義されている client.objにあります。
ブーストではなく、私のクラスに対して文句を言っていることに注意してください。ひとつ興味深いのは
#include <boost/asio.hpp>
から
client.cpp
しかし、次のようなエラーが発生します。
はmain.hにも含まれています。
.
見ての通り、クラスを二重に定義したり、インクルードしているわけではありません。
一度だけ
で
main.h
. では、ここで何が起こっているのか?
を読みました。
この回答
しかし、二重包含を期待しているため、役に立ちませんでした。このことを考慮した上で、重複投票をしてください。
解決方法は?
これは
コンパイラ
エラー: エラーは
リンカ
. コンパイルの後、リンカは各翻訳ユニット(訳注: 原文と訳文が同じ)のコンパイルの結果得られたオブジェクトファイルをマージします。
.cpp
ファイル)を作成します。
リンカが、異なる翻訳単位で同じシンボルを複数回定義していることを発見し、文句を言う(One Definition Ruleの違反である)。
その理由は、最も確実なのは
main.cpp
が含まれます。
client.cpp
を生成し、これらのファイルはコンパイラによって個別に処理されて
2
は別々のオブジェクトファイルです。従って
client.cpp
の翻訳ユニットでも定義されます。
main.cpp
という翻訳単位があります。このことが、通常は
#include
.cpp
ファイルを作成します。
クラスの定義は、別の
client.hpp
を行うファイルです。
ではなく
には、そのクラスのメンバ関数の定義も含まれています。
client.cpp
と
main.cpp
はそのファイルをインクルードします(つまり
#include
). 最後に
client.cpp
には、クラスのメンバ関数の定義が含まれています。
client.h
#ifndef SOCKET_CLIENT_CLASS
#define SOCKET_CLIENT_CLASS
#ifndef BOOST_ASIO_HPP
#include <boost/asio.hpp>
#endif
class SocketClient // Or whatever the name is...
{
// ...
bool read(int, char*); // Or whatever the name is...
// ...
};
#endif
クライアント.cpp
#include "Client.h"
// ...
bool SocketClient::read(int, char*)
{
// Implementation goes here...
}
// ... (add the definitions for all other member functions)
main.h
#include <iostream>
#include <string>
#include <sstream>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include "client.h"
// ^^ Notice this!
main.cpp
#include "main.h"
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】coutはstdのメンバではない
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] なぜヘッダーファイルと.cppファイルがあるのですか?[クローズド]