我已将std::vector<Training> _classes;
中的Training.h
声明为私有变量。我想首先从用户那里获取_noOfClasses
然后使用那么多元素初始化vector
,但我收到错误:
调用没有适当的operator()或类的类类型的对象 转换函数到指针到函数类型
Training::Training() : _noOfClasses(0) {
std::cout << "Enter the number of class\n";
std::cin >> _noOfClasses;
_classes(_noOfClasses); //Error
}
如何从用户输入中单独初始化vector
的大小?
答案 0 :(得分:3)
_classes(_noOfClasses);
语法不正确,_classes
不是仿函数,您无法在其上调用函数。您可以使用std::vector::resize()
调整其大小以包含_noOfClasses
个元素。
_classes.resize(_noOfClasses);
答案 1 :(得分:2)
您应该根据需要使用_classes.reserve()或_classes.resize() 要了解他们,请点击此链接:Choice between vector::resize() and vector::reserve()
答案 2 :(得分:1)
我会颠倒顺序 - 除非Training
类是“I / O”类,否则我会将Training
类的构造与任何用户输入分开。首先获取类的数量,然后从获得的用户输入中构造Training
实例。
std::size_t noOfClasses;
std::cout << "Enter the number of class\n";
std::cin >> noOfClasses;
// ...
Training::Training(std::size_t noOfClasses)
: classes_(noOfClasses), noOfClasses_(noOfClasses) {
}
也就是说,您可以将I / O分解为自己的函数,并将结果用作参数(省略错误检查);
std::size_t GetTrainingSize()
{
std::size_t i;
std::cout << "Enter the number of class\n";
std::cin >> i;
return i;
}
Training::Training() : classes_(GetTrainingSize()) {
// if needed...
_noOfClasses = classes_.size();
}
要在构建后调整std::vector
的大小,可以使用成员resize()
方法。然后OP代码看起来像;
Training::Training() : _noOfClasses(0) {
std::cout << "Enter the number of class\n";
std::cin >> _noOfClasses;
_classes.resize(_noOfClasses);
}