2013-05-08 2 views
0
Shape *shape[100];//global scope 
Square sqr;//global scope 


void inputdata() { 
int len,width; 
cout << "enter length"; 
cin >> len; 
cout << "enter width"; 
cin >> width; 

Square sqr(len,width); 
shape[0] = &sqr; 
//----> if shape[0]->computeArea(); here works fine. 
} 

void computeArea() { 
shape[0]->computeArea(); // --> run fail error 
} 

Форма является родительским классом, а квадрат - подклассом. оба имеют computeArea();ошибка наследования объекта виртуальная функция ошибка сбоя

, когда код достигает computeArea() У меня возникла ошибка с ошибкой при запуске. программа просто заканчивается, не давая мне никаких ошибок для меня, чтобы найти и исправить ее ... она просто показывает прогон и останавливает программу.

программа может работать правильно и показывать -> computeArea(), если код находится внутри inputdata(), но когда я его разделяю, он просто не работает должным образом. любое решение для этого?

+0

Из кода вы в курсе, я не вижу проблемы, вы, вероятно, неправильные вещи в другом месте. –

ответ

3

Этот Square

Square sqr(len,width); 

является экземпляром, который является локальным для сферы inputdata. Как только вы покинете эту область действия, вы останетесь с висячим указателем в shape[0]. Если вы хотите установить глобальную sqr, вам нужно

sqr = Square(len,width); 

Вы должны найти решение, которое не опирается на глобальные переменные, хотя.

+0

ОК, сейчас это работает благодаря большому количеству! – user2351750

1

Square sqr(len, width) создает автоматический объект. Он исчезает, когда функция возвращается, хотя ее адрес сохранен в shape[0].

0

изменить свой код так:

Shape *shape[100];//global scope 
Square *sqr;//global scope //make it a pointer or reference 


void inputdata() { 
int len,width; 
cout << "enter length"; 
cin >> len; 
cout << "enter width"; 
cin >> width; 
sqr = new Square(len,width); 
shape[0] = sqr; //remove & here 
} 
void computeArea() { 
shape[0]->computeArea(); 
} 
+0

Нет необходимости в этом динамическом распределении. – juanchopanza

+0

@juanchopanza В чем проблема динамического распределения? –

+0

Нет необходимости в этом, так зачем его использовать? Теперь у вас есть ресурс, который вам нужно отслеживать и удалять. – juanchopanza

Смежные вопросы