3

在朋友.h

#ifndef FRIEND
#define FRIEND 
class Friend
{

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

在朋友.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;进入(一个).cpp 文件。

于 2012-11-26T11:59:26.053 回答
1

尝试以下操作:

标题:

class Friend
{
// ...
};

extern Friend frnd1;

执行:

Friend frnd1;
于 2012-11-26T12:05:31.137 回答