我正在尝试为从其父朋友类的子类继承的数据结构使用初始化列表。下面我编译了一个示例来演示该问题(在 c++11 中)。
#include <iostream>
#include <vector>
class i_gossip;
class i_have_secrets{
friend class i_gossip;
public:
i_have_secrets();
private:
struct secret_t{
int secret_number;
std::vector<int> secret_vector;
}i_am_secret;
};
class i_gossip{
public:
struct i_am_secret : public i_have_secrets::secret_t { };
};
i_have_secrets::i_have_secrets(){
i_am_secret = {0, {0,1,2}}; // Totally fine
}
int main(int argc,char** args){
i_gossip::i_am_secret secret = {0, {0,1,2}}; // Compile error
return 0;
}
声明很好,但初始化不是,它给出了错误could not convert {...} from '<brace-enclosed initializer list>' to i_gossip::i_am_secret secret
。可以通过以下方式寻址和设置结构的每个单独成员来编译程序:
i_gossip::i_am_secret secret;
secret.secret_number = 0;
secret.secret_vector = {0,1,2};
如果成员可以使用,为什么初始化列表会失败并出现编译错误?