3

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

C++ 再定義ヘッダー ファイル

その質問はいっぱいになったので編集していません:)。

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

main.cpp:

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

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

}

サーバー.h:

// Server.h
#pragma once

#include <winsock2.h>

Handler.h:

// Handler.h
#pragma once

#include <string>
#include <vector>

#include "Server.h"

Processor.cpp:

// Processor.cpp

#include "StdAfx.h"
#include "Processor.h"
#include "Handler.h"

サーバー.cpp:

// Server.cpp

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

問題は、<winsock2.h>複数回含まれていることです。どこにあるのかわかりません。#pragma onceは同じ目的を果たします

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

私のコンパイラ(この場合はMSVC2008)。したがって、ヘッダーインクルードガードは必要ないと確信しています。しかし、2回含まれている間違いをどこで犯しているの<winsock2.>か、どうすれば解決できますか?

ありがとう

4

6 に答える 6

6

プロジェクト設定: プロジェクト プロパティ -> 構成 -> 詳細設定 -> 含まれているものを表示します。

ヘッダー インクルード ツリーがダンプされ、そこから犯人を確認できます。

于 2009-09-03T12:42:41.667 に答える
1

交換してみてください

#include <winsock2.h>

#ifndef _WINSOCK2API_
#include <winsock2.h>
#endif

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

于 2009-09-03T13:13:24.583 に答える
1

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

#define _MSWSOCK_
#define NCB_INCLUDED
#define _WINSOCK2API_
#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */
于 2009-09-03T12:38:47.263 に答える
1

私は最近同じ問題を抱えていて、含めるwinsock2.h前に含めて解決しましたwindows.h

于 2012-11-23T14:44:50.870 に答える
0

私はこの問題を抱えていたことを覚えているようです。windows.hとwinsock2.hの間に依存関係の問題があると思います。winsock2.hが使用されている場所の前に常にwindows.hを含めることで、この問題を回避したことを覚えているようです。

于 2012-11-23T14:55:02.527 に答える
0

他の回答で行った提案を試しましたか?

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

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

于 2009-09-03T12:40:34.263 に答える