在Friend.h中
#ifndef FRIEND
#define FRIEND
class Friend
{
public:
static int i ;
int j;
Friend(void);
~Friend(void);
}frnd1;
#endif
Run Code Online (Sandbox Code Playgroud)
在Friend.cpp
#include "Friend.h"
int Friend::i = 9;
extern Friend frnd1;
Friend::Friend(void)
{
}
Friend::~Friend(void)
{
}
Run Code Online (Sandbox Code Playgroud)
在main.cpp中
#include <iostream>
using namespace std;
#include"Friend.h"
int main()
{
frnd1.j = 9;
cout<<"hello";
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,它给出了以下链接器错误:
error LNK2005: "class Friend frnd1" (?frnd1@@3VFriend@@A) already defined in main.obj
Run Code Online (Sandbox Code Playgroud)
我无法理解如何在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;
Run Code Online (Sandbox Code Playgroud)
Friend.cpp:
#include "Friend.h"
Friend frnd1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |