2016-08-05 3 views
-2

При изучении классов C++ - базовое наследование - моя программа вернула ошибку: «C++ запрещает сравнение между указателем и целым числом, а C++ запрещает сравнение между указателем и целым числом». Где я неправ? Спасибо за вашу помощь! :-)C++ basic inheritance

#include <iostream> 
using namespace std; 

class Pizza 
{ public: int slices; char topping[10]; bool pepperoni , cheese ; }; 

int main() { 
// Make your own Pizza! 
Pizza pizza; 
cout << "\n You can have Cheese or Pepperoni Pizza!"; 
cout << "\n Type [cheese] or [pepperoni] \n"; 
cin >> pizza.topping[10]; 
if (pizza.topping[10] == "pepperoni") { pizza.pepperoni = true;} 
if (pizza.pepperoni == true) {cout << "How many slices of pepperoni would you like?";}; 

if (pizza.topping[10] == "cheese") { pizza.cheese = true;} 
if (pizza.cheese == true) {cout << "How many slices of cheese would you like?";}; 

cin >> pizza.slices; 
if (pizza.slices >= 1) {cout << "You ordered " << pizza.slices << " slices of " << pizza.topping[10] << " Pizza!"; } 
else if (pizza.slices <= 0) {cout << "Change your mind?"; } 
else { cout <<"Can't Decide? That's Okay.";} 
} 
+0

Это поможет, если вы отформатируете код немного лучше. – PaulMcKenzie

+1

Где наследство? – juanchopanza

+0

'cin >> pizza.topping [10];' - Что вы ожидали от этого? Они не покрывали 'std :: string' в том, чему вас учили? – PaulMcKenzie

ответ

-1

Спасибо за все ответы :-) ПРОГРАММА работает!

// C++ Class - Basic Inheritance - User Inputs Values 
#include <iostream> 
using namespace std; 

class Pizza 
{ public: int slices; string topping; bool pepperoni=false, cheese=false ; }; 

int main() 
{ 
// Make your own Pizza! 
Pizza pizza; 

cout << "\n You can have Cheese or Pepperoni Pizza!"; 
cout << "\n Type [cheese] or [pepperoni] \n"; 
cin >> pizza.topping; 

if (pizza.topping == "pepperoni") { pizza.pepperoni = true;} 
if (pizza.pepperoni == true) {cout << "How many slices of pepperoni would you like?"; 
cin >> pizza.slices; } 

else if (pizza.topping == "cheese") { pizza.cheese = true;} 
if (pizza.cheese == true) {cout << "How many slices of cheese would you like?"; 
cin >> pizza.slices; } 

if (pizza.slices >= 1) {cout << "You ordered " << pizza.slices << " slices of " << pizza.topping << " Pizza!"; } 
else if (pizza.slices <= 0) {cout << "Change your mind?"; } 
else { cout <<"Can't Decide? That's Okay.";} 
} 
0

Здесь:

pizza.topping[10] == "pepperoni" 

topping[10] имеет тип char в то время как "pepperoni" является массив символов, который распадается на const char*. Вы не можете сравнить эти два типа.

Если вы хотите сравнить строку внутри долива с «Пепперони», то вы должны использовать, например:

if (strcmp(pizza.topping, "pepperoni") == 0) {} 

в C++ вы должны использовать std::string, которые сделают вашу жизнь намного проще.

кстати. как указано в комментариях, topping[10] не связан, что является неопределенным Behaiour, как наихудшая вещь, кроме ошибки компиляции. Также убедитесь, что всякая строка в верхнем конце заканчивается символом '\ 0'

+4

Не только 'toppings [10]' одиночный 'char', но и вне его. –