3

Friend.h で

#ifndef FRIEND
#define FRIEND 
class Friend
{

public:
    static int i ;
    int j;
    Friend(void);
    ~Friend(void);
}frnd1;
#endif

Friend.cpp で

#include "Friend.h"
int Friend::i = 9;
extern Friend frnd1;
Friend::Friend(void)
{
}

Friend::~Friend(void)
{
}

main.cpp で

#include <iostream>
using namespace std;
#include"Friend.h"

int main()
{
frnd1.j = 9;
cout<<"hello";
getchar();
return 0;
}

上記のコードを実行すると、次のリンカ エラーが発生します。

error LNK2005: "class Friend frnd1" (?frnd1@@3VFriend@@A) already defined in main.obj

メイン関数でグローバル オブジェクトを使用する方法を理解できません。

4

3 に答える 3

5

問題は、ヘッダーファイルで定義さfrnd1れているため、すべての翻訳単位でインスタンス化されることです。

あなたがしたいことは、ヘッダーファイルで宣言し、対応するファイルで定義する.cppことです:

  1. に変更class Friend { ... } frnd1;します。class Friend { ... };Friend.h
  2. extern Friend frnd1;に追加Friend.h;
  3. に変更extern Friend frnd1;します。Friend frnd1;Friend.cpp

フレンド.h:

class Friend
{
  ...
};

extern Friend frnd1;

フレンド.cpp:

#include "Friend.h"

Friend frnd1;
于 2012-11-26T11:59:36.713 に答える
1

extern Friend frnd1;ヘッダーに入ります。Friend frnd1;(1 つの) .cpp ファイルに入ります。

于 2012-11-26T11:59:26.053 に答える
1

次のことを試してください。

ヘッダ:

class Friend
{
// ...
};

extern Friend frnd1;

実装:

Friend frnd1;
于 2012-11-26T12:05:31.137 に答える