我有一个有趣的变体,经常重复的C ++循环包括两难。简而言之:我想使用在子类中定义的枚举作为父类中实例变量的类型。这是一个最小的例子:
A.H
newList
c.h
#ifndef A_H
#define A_H
#include "c.h"
class ClassA
{
public:
ClassA() {};
void setStatus(ClassC::Status status) { a_status = status; }
void setA(int val) { a_var = val; }
int valueA() { return a_var; }
ClassC::Status status() { return a_status; }
private:
int a_var;
ClassC::Status a_status;
};
#endif // A_H
的main.cpp
#ifndef C_H
#define C_H
#include "a.h"
class ClassC : public ClassA
{
public:
enum Status
{
Valid,
Invalid
};
ClassC(): ClassA() {};
void setC(int val) { c_var = val; }
int valueC() { return c_var; }
private:
int c_var;
};
#endif // C_H
我无法转发#include "a.h"
int main(int argc, const char *argv[])
{
ClassA *obj = new ClassA();
return 0;
}
中的枚举声明,因为枚举的名称必须简单,而ClassC :: Status则不行。重要的是enum在子类的命名空间内,因为这些类有 lot ,我需要将枚举项的名称与其他枚举中的值隔离开来。有什么想法吗?
答案 0 :(得分:7)
简而言之:我想使用子类中定义的枚举作为父类中实例变量的类型。
你做不到。你需要提出一个不同的机制。