在 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
我无法理解如何在 main 函数中使用全局对象。
最佳答案
问题是 frnd1
在头文件中定义,因此最终在每个翻译单元中实例化。
你要做的是在头文件中声明,然后在相应的.cpp
中定义文件:
- 更改
class Friend { ... } frnd1;
至class Friend { ... };
在Friend.h
. - 添加
extern Friend frnd1;
至Friend.h
; - 更改
extern Friend frnd1;
至Friend frnd1;
在Friend.cpp
.
friend .h:
class Friend
{
...
};
extern Friend frnd1;
friend .cpp:
#include "Friend.h"
Friend frnd1;
关于c++ - 如何使用全局用户定义类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564360/