在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函数中使用全局对象。
答案 0 :(得分:5)
问题是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;
答案 1 :(得分:1)
extern Friend frnd1;
进入标题; Friend frnd1;
进入(一).cpp文件。
答案 2 :(得分:1)
尝试以下方法:
头:
class Friend
{
// ...
};
extern Friend frnd1;
实现:
Friend frnd1;