如何接受用户输入的向量大小?

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()