【发布时间】:2019-11-16 20:04:01
【问题描述】:
基本上,我有 2 个课程,“汽车”和“汽车”。 "Car" 有 setMotor,它应该接受一个 Motor 对象,当一个电机已经可用时,并继承电机的功率并通过对电机具有的每个 PS 说 "brum" 来输出它的功率。如果 "powerofmotor" 为 3,则调用 move 函数时汽车必须发出 "brumbrumbrum"。
我使用的是 Codeblocks,所以代码示例分为头文件、cpp 文件和主文件。
标题:
car.h
class Car:
{
public:
void setMotor(Motor m);
void move();
Car();
private:
int powerofcar = 0;
};
motor.h
class Motor{
friend class Car;
public:
Motor();
Motor(int p); //assign the power -> Motor(3) has 3 PS
private:
int powerofmotor = 0;
}
Cpp 文件:
car.cpp
Car::Car(){
}
void Car::setMotor(Motor m){
powerofcar = m.powerofmotor;
}
void Car::move(){
if(powerofcar != 0){
for(int i = 0; i < powerofcar; i++){
cout << "Brum";
}
cout << endl;
}
else {
cout << "i move without a motor" << endl;
}
}
motor.cpp
using namespace std;
Motor::Motor(){
}
Motor::Motor(int p){
powerofmotor = p;
}
main.cpp
int main()
{
Motor* m1 = new Motor(3);
Car *c1 = new Car;
c1 -> setMotor(m1); // <--- doesnt work "converation error"
c1 -> move();
}
使用下面的代码,我得到“错误:从 'Motor*' 到 'int' 的无效对话 [-fpermissive]"
如果我输入“c1 -> setMotor(*m1) 然后我得到“我在没有电机的情况下移动”,所以基本上调用了 else 语句。
预期的输出应该是“BrumBrumBrum”,因为在我为它分配了一个 3PS 的电机后,汽车应该有 3PS。
【问题讨论】:
-
顺便说一句,C++ 不是 C# 也不是 Java。您不需要为每个对象使用
new。 -
这是我的一个问题。你为什么要使用
new? -
您的
Car类没有任何Motor成员,因此setMotor方法是无用的。 -
最好提供minimal reproducible example(关注最小)。您展示的一半代码(例如所有包含的内容)对于解释问题没有必要,只会让其他人更难深入了解相关内容并为您提供帮助。
-
为什么
Motor是Car的朋友?如果您正在为汽车建模,那么Motor应该是Car的成员,因为Carhas-aMotor。您通常不会看到电机断开(并且位于外部、任何地方)的运行汽车(例如friend关系)。
标签: c++ class inheritance parameter-passing