为什么在尝试向量 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 中存储指向该对象的指针将在之后销毁临时对象时失效。