Я нахожусь в середине промокания ног с использованием композиции & занятия в 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;
Я явно запутался в вопросах определения объема работ, но я не уверен, что это за недостающий фрагмент.
Спасибо за любой & все помогают !!!
Во втором примере вы закомментировали e
,
//Engine e;
Других решений пока нет …