为什么我的编译器不允许这样做?
class News;
class ISubscriber {
public:
News *news;
virtual void update() = 0;
};
class News {
public:
float getVersion() { return this->version; }
void setVersion(float state) { this->version= state; this->notifyAllSubscribers(); }
void attach(ISubscriber *observer) { this->subscribers.push_back(observer); }
void notifyAllSubscribers() {
for (vector<ISubscriber*>::iterator it = subscribers.begin(); it != subscribers.end(); it++){
(*(*it)).update();
}
}
private:
vector<ISubscriber*> subscribers;
float version;
};
答案 0 :(得分:6)
sizeof
运算符不得应用于具有函数或不完整类型的表达式
[class.mem]/6,请强调:
在 class-specifier 的结尾
}
处,类被视为完全定义的对象类型([basic.types])(或完整类型)。在类 member-specification 中,该类在函数体,默认参数, noexcept-specifier 和默认成员初始值设定项(包括嵌套类中的此类)内被视为完整的)。 否则,在其自身的成员规范类中,它被视为不完整。
答案 1 :(得分:1)
我的旧处方,将其包装在一个函数中
class Resource{
//...
auto constexpr max_instances=10;
static auto& memory(){
static std::aligned_storage<sizeof(Resource),alignof(Resource)> storage[max_instances];
return storage;
};
};
答案 2 :(得分:0)
我认为这是因为您尚未完成对类的定义,因此编译器不知道它的大小,从而产生此错误。我不知道您要在这里完成什么,使用aschepler的答案,并在实际的类定义之外定义静态const char