2


0

そう、タイトルは言う。 ヘッダーファイルを複数回インクルードすることによる再定義エラーが発生しました。 私はそれが原因でそれを知っていますが、私は解決する方法がわからない はい、私は以前1時間先に同じ問題をSOに投稿しました。 しかし、私は適切に説明することができず(私はそう思う)、そして答えが期待できませんでした。 これがリンクです。

https://stackoverflow.com/questions/1372480/c-redefinition-header-files[C再定義ヘッダーファイル]

私はその質問を編集していません。

さて、私はいくつかのクラスがあり、それらの構造はこのようになっています:

  • main.cpp:*

#include "Server.h" #include "Handler.h" #include "Processor.h"

int main(int argc、char * argv []){

}
  • Server.h:*

// Server.h
#pragma once

#含める
  • Handler.h:*

// Handler.h
#pragma once

#include #include

#include "Server.h"
  • Processor.cpp:*

// Processor.cpp

#include "StdAfx.h" #include "Processor.h" #include "Handler.h"
  • Server.cpp:*

// Server.cpp

#include "Server.h" #include "Processor.h"

問題は、 ``が複数回含まれているということです。 *#プラグマonce *と同じ目的を果たします。

#ifndef SOME_FILE_H #define SOME_FILE_H
// code here
#endif // SOME_FILE_H

私のコンパイラ(この場合はMSVC2008)で。 そのため、ヘッダーにガードを含める必要はないと確信しています。 しかし、 ``が2回含まれているという間違いをしている場所を見つけて、どうすれば解決できますか。

ありがとう

6 Answer


5


あなたのプロジェクト設定で:Project properties - > configuration - > advanced - > show includesを含みます。

それはヘッダインクルードツリーをダンプします、そこからあなたは犯人を見ることができるでしょう。


1


stdafxまたはwindowsを含める前に、これらのいくつかまたはすべてが必要です。

#define _MSWSOCK_ #define NCB_INCLUDED #define _WINSOCK2API_ #define _WINSOCKAPI_ / * windows.hにwinsock.hが含まれないようにする* /


1


私は最近同じ問題を抱えており、 windows.h`をインクルードする前に winsock2.h`を含めてそれを解決しました。


0


あなたは私たちがあなたの他の答えでした提案のうちのどれかを試しましたか?

真剣に、 `#pragma once`の代わりにインクルードガードを使ってみてください。

問題が解決しない場合は、戻ってきてSOに別の質問を投稿してください。 同じことについて複数の質問を投稿しないでください。私たちのアドバイスを受け入れたくない(またはできない)からです。


0


交換してみてください

#含める

#ifndef _WINSOCK2API_ #include #endif

_WINSOCK2API_はwinsock2.h内で定義されているため、コンパイラはそれを複数回インクルードしようとしません。


0


私はこの問題を抱えていたのを覚えているようです。 私はwindows.hとwinsock2.hの間に依存関係の問題があると思います私はそれが使われたところはどこでもwinsock2.hの前にいつもwindows.hをインクルードすることによってそれを回避したのを覚えているようです。