我正在為 C 類做一個作業,在使用帶有向量的推回時出現錯誤。老實說,我找不到任何關于為什么這不起作用的資訊,并給我一個“沒有多載函式的實體”錯誤
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);
}
uj5u.com熱心網友回復:
函式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給函式。在這種情況下,當臨時物件隨后被銷毀時,將指向該物件的指標存盤在向量中將變得無效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/337799.html
下一篇:`std::decay_t<T>decay_copy(T&&)`是否等同于`autodecay_copy(auto&&)`?
