我有以下问题。我有一节课,比如说
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类编写一个构造函数,它读取一个文件并根据文件的内容初始化vector 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));
}
但我收到错误&#34;输入&#39; std :: vector&#39;不提供呼叫运营商&#34;。我也不能使用构造函数初始化列表(至少我是这么认为),因为它取决于我的输入文件我的向量有多大。 有人能告诉我这是怎么做到的吗?
答案 0 :(得分:2)
只需使用方法assign
mynumbers.assign(num,MyNumber(5));
至于这句话
mynumbers(num,MyNumber(5));
然后它对应于函数运算符的调用。但是,标准类std::vector
没有这样的运算符。构造函数中的对象mynumbers
已经创建/因此您只能为其分配新值。你不能再次调用它的构造函数。另一方面,方法assign
被重载,以至于它对应于该类的大多数构造函数。