2016-12-09 52 views
1

我有以下问题。我有一类,说初始化类中的向量

class MyClass{ 
public: 
    class MyNumber; 
    MyClass(char const *filename); 
    class MyNumber{ 
    public: 
    MyNumber(int n) : n(n) {} 
    private: 
    int n; 
    }; 

private: 
    std::vector<MyNumber> mynumbers 
}; 

现在我想写的MyClass类,它读取文件,并根据文件的内容初始化向量通过myNumbers构造。我所做的是以下内容

MyClass::Myclass (char const * filename){ 
    int num = 0; 
    std::string line; 
    std::getline(file, line);    
    std::stringstream ss(line);    
    ss >> num; 
    mynumbers(num,MyNumber(5)); 

} 

但我得到的错误“类型”std :: vector'不提供调用运算符“。我也不能使用构造函数初始化列表(至少我认为是这样),因为它取决于我的输入文件我的向量必须有多大。 有人可以告诉我这是怎么完成的?

+0

执行任何I/O(超出日志记录)的构造函数通常是一个坏主意。考虑将文件读数移至单独的设置功能。 – molbdnilo

+0

我建议不要在构造函数中读取文件。改为创建一个“加载”或“初始化”方法。如果读取文件失败或需要创建对象的副本(如'std :: vector'),会发生什么情况。 –

+0

'mynumbers.resize(num,MyNumber(5));'? – Jarod42

回答

2

只需使用方法assign

mynumbers.assign(num,MyNumber(5)); 

至于这种说法

mynumbers(num,MyNumber(5)); 

那么它对应的功能操作的呼叫。但标准类std::vector没有这样的运营商。构造函数中的对象mynumbers已经创建/因此您只能将其赋值为新值。你不能再次调用它的构造函数。另一方面,方法assign被重载,以至于它对应于类的大部分构造函数。

+0

感谢这个作品。你能用简短的句子来解释为什么这种方法有效,但我的问题中没有? – user3726947

+0

@ user3726947我已更新我的帖子。 –