嗨,有人可以解释下面的代码有什么问题吗?我首先在另一个将要使用这个孩子的类中包含一个抽象类的子项。
#include "child.h"
然后我用下面的指针填充下面的2d向量。
vector<vector<abstractitem*>*>vec;
然后我在班上使用这个类函数。函数get可以在抽象类中找到。
void fn::getall()
{
for (int i=0;i<m_nrows;i++)
{
for(int j=0;j<m_ncolumns;j++)
{
vec[i][j]->get(); //error on this line: do you intend to use . instead?
}
printf("\n");
}
}
非常感谢您的帮助。
答案 0 :(得分:3)
您需要更改
vector<vector<abstract*>*> vec;
到
vector<vector<abstract*>> vec;
或更改
vec[i][j]->get();
到
(*vec[i])[j]->get();
前者可能更好,外部矢量应该保持指向内部矢量的指针是没有充分理由的。
更好的是使用智能指针:
vector<vector<shared_ptr<abstract>>> vec;
它让你完全摆脱对象内存管理
答案 1 :(得分:1)
请注意,您的外部矢量是指向矢量的指针的矢量,而不是矢量的矢量。这意味着您的函数调用将解析为:
vec[i][j]->get();
(vector<abstractitem*>*)[j]->get();
*(vector<abstractitem*>* + j)->get();
vector<abstractitem*> ->get();
您可以在最后一行看到错误:您的get()函数正在尝试在向量上运行,但您编写它期望它是abstractitem*
。
将声明更改为向量矢量,或者为您的调用添加取消引用:
vector<vector<abstractitem*>> vec; //option 1
(*vec[i])[j]->get(); //option 2