【发布时间】:2016-12-09 18:35:08
【问题描述】:
我有以下问题。我有课,说
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' 不提供呼叫运算符”。我也不能使用构造函数初始化列表(至少我是这么认为的),因为它取决于我的输入文件我的向量必须有多大。 有人可以告诉我这是怎么做到的吗?
【问题讨论】:
-
执行任何 I/O(除了日志记录)的构造函数通常是个坏主意。考虑将文件的读取移至单独的设置函数。
-
我建议不要在构造函数中读取文件。改为创建“加载”或“初始化”方法。如果读取文件失败或需要创建对象的副本(例如
std::vector)会发生什么。 -
mynumbers.resize(num, MyNumber(5));? -
我建议不要使用嵌套类,因为它们会增加程序的复杂性(这也会使调试和测试更加复杂)。
-
@Thomas Matthews。如果文件格式不符合我的预期,我会抛出错误。当我编写方法而不是构造函数时,我看不出我有什么优势。