如何使用全局用户定义的类对象

How to use global userdefined class object

本文关键字:对象 定义 用户 何使用 全局      更新时间:2023-10-16

In Friend.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)
{
}

主要.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

我无法理解如何在主函数中使用全局对象。

问题是frnd1是在头文件中定义的,因此最终在每个翻译单元中实例化。

你要做的是在头文件中声明它,并在相应的.cpp文件中定义它:

  1. Friend.h中将class Friend { ... } frnd1;更改为class Friend { ... };
  2. extern Friend frnd1;添加到Friend.h;
  3. Friend.cpp中将extern Friend frnd1;更改为Friend frnd1;

朋友:

class Friend
{
  ...
};
extern Friend frnd1;

朋友.cpp:

#include "Friend.h"
Friend frnd1;

extern Friend frnd1; 进入标题; Friend frnd1;进入(一个).cpp文件。

尝试以下操作:

页眉:

class Friend
{
// ...
};
extern Friend frnd1;

实现:

Friend frnd1;