聚合关系 C++ 中另一个 class 中的 class 的静态对象

Static Object of a class in another class in aggregation relationship C++

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

source.cpp

#include"control.h"

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

control.h

#include"recorder.h"

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

recorder Controller::rec;

control.cpp

#include"control.h"

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

recorder.h

#include<iostream>

using namespace std;

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

recorder.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

中定义

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

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