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

时间:2012-11-26 11:55:11

标签: c++

在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函数中使用全局对象。

3 个答案:

答案 0 :(得分: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
  4. 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;