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

C++ 如何接受向量大小的用户输入?,c++,vector,stdvector,C++,Vector,Stdvector,我已经声明了std::vector\u类在Training.h中作为私有变量。我想先从用户那里获取\u noofclass,然后用那么多元素初始化向量,但我得到一个错误: 调用类类型的对象而不使用适当的运算符()或 将函数转换为指向函数类型的指针 Training::Training():\u noofclass(0){ 标准:cout>\u noofclass; _类(_noofclass);//错误 } 如何分别从用户输入初始化向量的大小?\u类(\u noofclass)是无效语法,\u

我已经声明了
std::vector\u类
Training.h
中作为私有变量。我想先从用户那里获取
\u noofclass
,然后用那么多元素初始化
向量,但我得到一个错误:

调用类类型的对象而不使用适当的运算符()或 将函数转换为指向函数类型的指针

Training::Training():\u noofclass(0){
标准:cout>\u noofclass;
_类(_noofclass);//错误
}
如何分别从用户输入初始化
向量的大小?

\u类(\u noofclass)
是无效语法,
\u classes
不是函子,您不能在其上调用函数。您可以使用调整其大小以包含
\u noofclass
元素

_classes.resize(_noOfClasses); 

我会颠倒顺序-除非
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) {
}

您应该根据需要使用_classes.reserve()或_classes.resize()
要了解它们,请访问以下链接:

旁注:在命名自己的符号时不要使用前导下划线:“每个以下划线开头的名称都保留给实现,以用作全局命名空间中的名称。”(C++ISO标准,第17.6.4.3.2节)。@Michael成员变量不在全局命名空间中,“那就好了。”迈克尔,它后面不会紧跟着一个大写字母,那就好了。
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) {
}
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();
}
Training::Training() : _noOfClasses(0) {
    std::cout << "Enter the number of class\n";
    std::cin >> _noOfClasses;
    _classes.resize(_noOfClasses);
}