我正在使用c ++编写导游,我在运行代码时,在Attraction类,setName函数和main函数中继续获取此线程,我不明白'这个问题。这是.cpp和主文件。
//.cpp file
#include <string>
#include "Attraction.h"
string Attraction::getName(){
return name;
}
int Attraction::getIDType(){
return id;
}
void Attraction::setName(string name){
this -> name = name;//In this line I receive the thread
}
void Attraction::setIDType(int typeID){
this -> typeID = typeID;
}
//main.cpp
int main() {
int x;
City Rome(111,"Rome");
City Dubai(222,"Dubai");
City Paris(333, "Paris");
menu(Rome,Dubai,Paris);
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
//{new Sport,new Sport,new Sport,new Culture,new Culture,new Culture,new Shopping,new Shopping,new Shopping};
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setName("Football");
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
Ds[0].setIDType(1);
Ds[1].setIDType(1);
Ds[2].setIDType(1);
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Dubai.setAttraction(Ds, x);
return 0;
}
答案 0 :(得分:1)
在您的C ++代码中,您正在创建一个大小为x
的动态数组,但您永远不会为x赋值,这意味着它的默认值为0.
这意味着以下行创建空数组:
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
因此,当您致电Ds[0].setName()
时,您会收到分段错误,因为您在错误的地址上调用方法。
要解决此问题,请确保为每个阵列指定有效大小。这是一个例子:
int main()
{
Sport* Ds = new Sport[9];
Ds[0].setIDType(1);
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setIDType(1);
Ds[2].setName("Football");
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Culture* Dc = new Culture[3];
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Shopping* Dh = new Shopping[3];
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
delete[] Ds;
delete[] Dc
delete[] Dh;
return 0;
}