C++中使用指针的经典对象列表
Classic List of object in C++ using pointers
我想用 C++ 创建一个对象的定向列表。我有 3 classes:BasicMiachine、Desktop、Laptop。最后两个 classses 扩展了 BasicMachine。我想要做的是仅使用一个列表制作对象列表(台式机,笔记本电脑)。在抽象的 Basic Class 中 class (因为我已经将一个方法声明为虚拟的)我有一个字段,它是指向下一个对象的指针,是 BasicClass 类型。下面是我的代码:
int main () {
BasicClass* headList= NULL;
BasicClass* iterator = NULL;
while(....)
{
switch(.....){
case 1:
addNewComputer(headList,iterator,numberOfObjects);
break;
}
}
void static addNewComputer(BasicClass* headList, BasicClass* iterator,short numberOfObjects)
{
short choice;
cout<<"What is your machine?"<<endl<<"1) Desktop or2) Laptop"<<endl;
cout<<"Your choice: "; cin>>choice;
if(choice== 1)
{
//Add some data to variables// ....//
if(numberOfObjects == 0)
{
headList = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
iterator= headList ;
iterator->nextObject = NULL;
}
else
{
BasicClass* tmpIterator= NULL;
tmpIterator= headList ;
tmpIterator->nextObject = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
tmpIterator= pomocniczyWskaznik -> nextObject;
tmpIterator->nextObject = NULL;
}
}
else if(choice == 2)
{
//It is the same as above but I add here a La
}
};
在我添加一台和第二台计算机后,出现如下错误:"Access violation writing location 0x00000050." 指针有问题吗?我使用 BasicClass 类型指针来保存两个对象(台式机、笔记本电脑)。
你犯了按值而不是按引用传递指针的经典错误。
将addNewComputer
改为例如
void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)
事情应该会更好。
我建议你看看standard containers。无论如何,问题是你正在按值传递指针,所以当你调用 "new" 时,addNewComputer() 中的指针指向一个新的内存方向,当函数 returns、headList 和迭代器为空时(注意内存泄漏问题)。要解决您的问题,您需要通过引用传递 headList 和迭代器,即
void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)
希望对您有所帮助。
我想用 C++ 创建一个对象的定向列表。我有 3 classes:BasicMiachine、Desktop、Laptop。最后两个 classses 扩展了 BasicMachine。我想要做的是仅使用一个列表制作对象列表(台式机,笔记本电脑)。在抽象的 Basic Class 中 class (因为我已经将一个方法声明为虚拟的)我有一个字段,它是指向下一个对象的指针,是 BasicClass 类型。下面是我的代码:
int main () {
BasicClass* headList= NULL;
BasicClass* iterator = NULL;
while(....)
{
switch(.....){
case 1:
addNewComputer(headList,iterator,numberOfObjects);
break;
}
}
void static addNewComputer(BasicClass* headList, BasicClass* iterator,short numberOfObjects)
{
short choice;
cout<<"What is your machine?"<<endl<<"1) Desktop or2) Laptop"<<endl;
cout<<"Your choice: "; cin>>choice;
if(choice== 1)
{
//Add some data to variables// ....//
if(numberOfObjects == 0)
{
headList = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
iterator= headList ;
iterator->nextObject = NULL;
}
else
{
BasicClass* tmpIterator= NULL;
tmpIterator= headList ;
tmpIterator->nextObject = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
tmpIterator= pomocniczyWskaznik -> nextObject;
tmpIterator->nextObject = NULL;
}
}
else if(choice == 2)
{
//It is the same as above but I add here a La
}
};
在我添加一台和第二台计算机后,出现如下错误:"Access violation writing location 0x00000050." 指针有问题吗?我使用 BasicClass 类型指针来保存两个对象(台式机、笔记本电脑)。
你犯了按值而不是按引用传递指针的经典错误。
将addNewComputer
改为例如
void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)
事情应该会更好。
我建议你看看standard containers。无论如何,问题是你正在按值传递指针,所以当你调用 "new" 时,addNewComputer() 中的指针指向一个新的内存方向,当函数 returns、headList 和迭代器为空时(注意内存泄漏问题)。要解决您的问题,您需要通过引用传递 headList 和迭代器,即
void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)
希望对您有所帮助。