Синтаксис композиции в переполнении стека

Я нахожусь в середине промокания ног с использованием композиции & занятия в C ++. Фрагмент кода, с которым я столкнулся, реализует композицию следующим образом:

#include<iostream>
using namespace std;
class Engine {
public:
int power;
};
class Car {
public:
Engine e;
string company;
string color;
void show_details() {
cout << "Compnay is:            " << company << endl;
cout << "Color is:              " << color   << endl;
cout << "Engine horse power is: " << e.power << endl;
}
};
int main() {
Car c;
c.e.power = 500;
c.company = "hyundai";
c.color   = "black";
c.show_details();
return 0;
}

Это хорошо компилируется и работает. В этой реализации мне не нравится то, что место нахождения функции «void show_details», которую я предпочел бы разместить снаружи.

Однако, если я наивно пытаюсь сделать следующее:

#include<iostream>
using namespace std;
class Engine {
public:
int power;
};
class Car {
public:
//Engine e;
string company;
string color;
void show_details();
//void show_details() {
//  cout << "Compnay is:            " << company << endl;
//  cout << "Color is:              " << color   << endl;
//  cout << "Engine horse power is: " << e.power << endl;
//}
};
void Car::show_details(){
cout << "Compnay is:            " << company << endl;
cout << "Color is:              " << color   << endl;
cout << "Engine horse power is: " << e.power << endl;
}
int main() {
Car c;
c.e.power = 500;
c.company = "hyundai";
c.color   = "black";
c.show_details();
return 0;
}

g ++ возвращает следующие ошибки:

comp3.cpp: In member function ‘void Car::show_details()’:
comp3.cpp:22:44: error: ‘e’ was not declared in this scope
cout << "Engine horse power is: " << e.power << endl;
^
comp3.cpp: In function ‘int main()’:
comp3.cpp:26:9: error: ‘class Car’ has no member named ‘e’
c.e.power = 500;

Я явно запутался в вопросах определения объема работ, но я не уверен, что это за недостающий фрагмент.

Спасибо за любой & все помогают !!!

-4

Решение

Во втором примере вы закомментировали e,

//Engine e;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]