为什么在尝试向量 push_back 时出现 "no instance of overloaded function matches the argument list" 错误?
why is there a "no instance of overloaded function matches the argument list" error when attempting vector push_back?
我正在为 C++ class 做一个赋值,但在使用 vector 返回时出现错误。老实说,我找不到任何关于为什么这不起作用的信息,并给我一个“没有重载函数的实例”错误
class StudentData {
class StudyModule {
private:
const int studyModuleCode;
const std::string studyModuleName;
public:
StudyModule();
StudyModule(const StudyModule& copy);
~StudyModule();
};
private:
const int studentNumber;
std::string studentName;
std::vector<StudyModule*> modules;
public:
StudentData();
StudentData(const StudentData& copy);
~StudentData();
void addModules(const StudyModule& module);
int howManyModules();
};
void StudentData::addModules(const StudyModule& module)
{
this->modules.push_back(&module);
}
函数addModules()
声明如下:
void addModules(const StudyModule& module);
即它的参数是对const
对象的引用。
但是向量有一个指向非常量对象的指针作为它的模板参数:
std::vector<StudyModule*> modules;
因此,编译器针对此语句发出消息:
this->modules.push_back(&module);
因为表达式 &module
的类型为 const StudyModule *
,即指向 const 对象的指针。
即使您像这样更改向量的模板参数:
std::vector<const StudyModule *> modules;
您的方法不安全,因为用户可以将 StudyModule
类型的临时对象传递给该函数。在这种情况下,在 vector 中存储指向该对象的指针将在之后销毁临时对象时失效。
我正在为 C++ class 做一个赋值,但在使用 vector 返回时出现错误。老实说,我找不到任何关于为什么这不起作用的信息,并给我一个“没有重载函数的实例”错误
class StudentData {
class StudyModule {
private:
const int studyModuleCode;
const std::string studyModuleName;
public:
StudyModule();
StudyModule(const StudyModule& copy);
~StudyModule();
};
private:
const int studentNumber;
std::string studentName;
std::vector<StudyModule*> modules;
public:
StudentData();
StudentData(const StudentData& copy);
~StudentData();
void addModules(const StudyModule& module);
int howManyModules();
};
void StudentData::addModules(const StudyModule& module)
{
this->modules.push_back(&module);
}
函数addModules()
声明如下:
void addModules(const StudyModule& module);
即它的参数是对const
对象的引用。
但是向量有一个指向非常量对象的指针作为它的模板参数:
std::vector<StudyModule*> modules;
因此,编译器针对此语句发出消息:
this->modules.push_back(&module);
因为表达式 &module
的类型为 const StudyModule *
,即指向 const 对象的指针。
即使您像这样更改向量的模板参数:
std::vector<const StudyModule *> modules;
您的方法不安全,因为用户可以将 StudyModule
类型的临时对象传递给该函数。在这种情况下,在 vector 中存储指向该对象的指针将在之后销毁临时对象时失效。