如何接受用户输入的向量大小?
How to accept user input for the size of a vector?
我已经在 Training.h
中将 std::vector<Training> _classes;
声明为私有变量。我想先从用户那里得到 _noOfClasses
,然后用那么多元素初始化 vector
,但出现错误:
call of an object of a class type without appropriate operator() or
conversion functions to pointer-to-function type
Training::Training() : _noOfClasses(0) {
std::cout << "Enter the number of class\n";
std::cin >> _noOfClasses;
_classes(_noOfClasses); //Error
}
如何根据用户输入分别初始化 vector
的大小?
_classes(_noOfClasses);
不是有效语法,_classes
不是仿函数,您不能在其上调用函数。您可以使用 std::vector::resize()
调整它的大小以包含 _noOfClasses
元素。
_classes.resize(_noOfClasses);
我会颠倒顺序 - 除非 Training
class 是 "I/O" class,否则我会分开构建 Training
class 来自任何用户输入。先获取classes的个数,然后根据获取的用户输入构造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);
}
您应该根据需要使用 _classes.reserve() 或 _classes.resize()
要了解它们,请遵循此 link :Choice between vector::resize() and vector::reserve()
我已经在 Training.h
中将 std::vector<Training> _classes;
声明为私有变量。我想先从用户那里得到 _noOfClasses
,然后用那么多元素初始化 vector
,但出现错误:
call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type
Training::Training() : _noOfClasses(0) {
std::cout << "Enter the number of class\n";
std::cin >> _noOfClasses;
_classes(_noOfClasses); //Error
}
如何根据用户输入分别初始化 vector
的大小?
_classes(_noOfClasses);
不是有效语法,_classes
不是仿函数,您不能在其上调用函数。您可以使用 std::vector::resize()
调整它的大小以包含 _noOfClasses
元素。
_classes.resize(_noOfClasses);
我会颠倒顺序 - 除非 Training
class 是 "I/O" class,否则我会分开构建 Training
class 来自任何用户输入。先获取classes的个数,然后根据获取的用户输入构造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);
}
您应该根据需要使用 _classes.reserve() 或 _classes.resize() 要了解它们,请遵循此 link :Choice between vector::resize() and vector::reserve()