oop - 聚合关系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 中定义
解决方案
Controller::rec
您在头文件中定义变量。这意味着该变量将在包含该头文件的每个翻译单元中定义。它只能在一个翻译单元中定义。
这很容易做到:只需将定义移动到单个源文件中。
推荐阅读
- swift - xcode中“产品”下的“应用程序”是什么?
- python - 仅读取单行时,会丢弃命名管道内容
- javascript - 从非异步调用 Async/await 函数并添加值返回未定义
- android - filter() 方法不适用于我的列表视图
- node.js - 在 MVC Express 应用程序中创建数据库服务
- vue.js - 如何让管理员在 Vue 应用程序中编辑一些文本?
- algorithm - LinkedList 有什么区别?
- sql-server - 如何在一个数据库中实现 Azure SQL 服务器的实时报告?
- java - 从 SVG 图像导入的矢量图像在 ImageView 中无法识别
- html - 如何在不包含跨度标签的情况下“文本中心”