访问其他类中的静态方法和静态布尔值
Accessing Static Method and Static bool in other class
>我有一个基接口类:
class A
{
public:
ITask(){}
virtual bool Start()=0;
virtual void Update()=0;
virtual void Stop()=0;
};
我现在有另外 2 个类,它们继承自此
#include "A.h"
#include "C.h"
class B: public A
{
public:
bool Start(){}
void Update()
{
c.Start();
}
void Stop(){}
static bool m_run;
static void SetRun(bool run)
{
m_run = run;
}
private:
C c;
};
最后我有一个第三类:
#include "A.h"
#include "B.h"
class C : public A
{
public:
bool Start()
{
B::SetRun(false); // cant do this
B::m_run = false; // or this
}
void Update()
{
}
void Stop()
{
}
}
为了简单起见,我删掉了一些代码。
我不明白为什么我无法访问 B 中的静态变量。我需要将其设为指针还是引用?
我收到 2 个错误:
error C2653: 'B' : is not a class or namespace name
error C3861: 'm_run': identifier not found
虽然你没有显示它,但我假设B.h
包含C.h
; 否则C c;
行将无法编译。这会导致头文件中的循环依赖关系:B.h
必须在C.h
之前包含,这必须在B.h
之前包含,这是不可能的。
最简单的解决方案是将C::Start
的主体移出C
的定义,这样C.h
就不需要包含B.h
。函数定义可以放入源文件,或者如果要保持内联,则可以放入单独的标头中。
或者,您可以修改B
以包含std::unique_ptr<C>
而不是C
的实例,并实现一个构造函数(在源文件或单独的标头中(使用 new C
初始化它。然后B.h
只需要转发声明class C;
,而不是包含C.h
。
如果可能的话,更好的解决方案是重新考虑类之间的关系,这样就不会有循环依赖关系。
(更新:当我写这个答案时,问题发生了变化,以表明B.h
确实包括我猜测的C.h
。
您的示例代码没有任何问题(编辑后(,问题一定出在其他地方,例如失败的包含。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 对于完成布尔值设置为 true 后未停止的循环
- fstream / ifstream / ofstream 对象如何转换为布尔值
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 为什么布尔值不能比作最后一点?
- 如何使用返回布尔值的函数?
- 避免使用静态布尔值上的if语句进行逻辑决策
- 访问其他类中的静态方法和静态布尔值