聚合关系 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 中定义。它应该只在一个翻译单元中定义。
这很容易做到:只需将定义移动到单个源文件。
我有两个 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 中定义。它应该只在一个翻译单元中定义。
这很容易做到:只需将定义移动到单个源文件。