【发布时间】:2021-12-19 21:59:43
【问题描述】:
我正在尝试创建一个存储基类的向量,然后将其传递给另一个类,该类然后从基类的向量访问派生类我发现了多个涵盖此问题的 Stack Overflow 问题,但它们都缺少某些方面就像跨类传递它或将多个对象存储在一个向量中。 CPP文件
vector<Item*> Items::cM() {
vector<Item*> M;
string line;
string filePath = "...";
ifstream stream(filePath);
while (getline(stream, line)) {
vector <string> IV= UtilFunctions::splitString(line, ',');
const char *t= IV[0].c_str();
switch (*t) {
case 'a': {
StarterFood tmpStarter = StarterFood(*a,b,c);//Simplified
Item* b = &tmpStarter;
M.push_back(b);
//If I use b here and do b->toString() works as expected
break;
}
}
}
return M;
}
主要
int main(){
vector <Item*> i= Items::cM();
items[0]->toString();//This is an overloaded function that all of the derived classes
//Throws the error Access violation reading location 0xCCCCCCCC.
have such as starterfood
system("pause");
return 0;
}
如果需要更多信息,请随时询问。谢谢我也尝试过传递一个指针然后取消引用该指针,但我认为切片我的对象只留下基类,我尝试实现 unique_ptr 但我收到一个语法错误,说没有从 starterFood 返回 unique_ptr 的重载。 错误是访问冲突读取位置 0xCCCCCCCC。
【问题讨论】:
-
Item* b = &tmpStarter;您正在存储一个指向临时对象的指针,并在超出范围后尝试访问它。 -
我确实这么认为,但这是迄今为止唯一不会引发语法错误的尝试,我将如何解决这个问题。我尝试只传递 &tmpStarter 但这只是拉出基类 toString
-
@Passerby 不是指向临时变量的指针,而是指向超出范围的局部变量。指向临时的指针看起来更像
&StarterFood(*a,b,c)。不过差别不大,因为最终结果仍然是一个悬空指针。 -
使用
unique_ptr可能是个好主意。我建议修改您的问题以显示该方法并询问您以这种方式遇到的(第一个)错误。
标签: c++ oop pointers derived-class base-class