嗨,我是C语言的新手,有C的知识。我正在尝试学习对象指针和在C ++上尝试模式。 我有2节课,并试图学习纪念品。首先是管理器,它保存我的对象的动态数组。
Manager.h:
#ifndef MANAGER_H
#define MANAGER_H
#include "MyObject.h"
class Manager
{
public:
Manager();
~Manager();
MyObject *objArray;
int _top;
MyObject topObj();
void addObj(MyObject newObj);
};
#endif // MANAGER_H
Manager.cpp:
#include "Manager.h"
Manager::Manager()
{
objArray = NULL;
_top = -1;
}
Manager::~Manager()
{
delete[] objArray;
}
MyObject Manager::topObj()
{
return objArray[_top]; //Will throw error if empty
}
void Manager::addObj(MyObject newObj)
{
MyObject *newArray = new MyObject[++_top]();
for(int i=0; i<_top; i++){
newArray[i] = objArray[i];
}
newArray[_top] = newObj;
objArray = newArray;
}
并在我的主要
int main(int argc, char **argv)
{
Manager *mptr = new Manager();
MyObject *optr = new MyObject();
mptr->addObj(*optr); //won't work
//changing object's properties
mptr->addObj(*optr);
return 0;
}
但这不起作用,当我尝试addObj方法时它停止工作,我找不到任何错误,你介意告诉我我的错误在哪里
答案 0 :(得分:2)
函数Manager::addObj
中的第一行是错误的,您想这样做:
MyObject *newArray = new MyObject[++_top];
另外,不确定抛出错误的意思(函数Manager::topObj
中的注释)。如果您认为如果_top
为-1则会抛出异常,那么您就错了。您将获得访问冲突。如果您要提供有关您遇到的错误(崩溃)的更多详细信息,那将是一件好事。