首页 > 解决方案 > 聚合关系C ++中另一个类中的一个类的静态对象

问题描述

我有两个类,第一个类包含另一个类的对象作为静态但 C++ 不允许我这样做并给我一些错误。

源码.cpp

#include"control.h"

int main()
{
  Controller cnt;
  cnt.tempcont();
  return 0;
}

控制.h

#include"recorder.h"

class Controller 
{
public:
  static recorder rec;
  void tempcont();
};

recorder Controller::rec;

控制.cpp

#include"control.h"

void Controller::tempcont()
{
  rec.temprec();
}

录音机.h

#include<iostream>

using namespace std;

class recorder
{
public:
  int a;
  void temprec();
};

记录器.cpp

#include"recorder.h"

void recorder::temprec()
{
  cout << "temp rec called";
}

我收到以下错误,我不知道为什么会出现这些错误..

错误 LNK1169 找到一个或多个多重定义符号

错误 LNK2005 "public: static class recorder Controller::rec" (?rec@Controller@@2Vrecorder@@A) 已在 control.obj 中定义

标签: oopc++11staticaggregation

解决方案


Controller::rec您在头文件中定义变量。这意味着该变量将在包含该头文件的每个翻译单元中定义。它只能在一个翻译单元中定义。

这很容易做到:只需将定义移动到单个源文件中。


推荐阅读