gpt4 book ai didi

c++ - 继承类中的构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:18 25 4
gpt4 key购买 nike

我在 C++ 中的继承和构造函数方面遇到了一些问题。我得到的是一个 VirtualMotor 类,它继承了 Motor(这是正确的说法吗?)。类 VirtualMotor 应该有它自己的构造函数,但是我在创建它时做错了,编译器给我一个错误(见下文)。我的源代码是这样的:

电机.h

class Motor
{
protected:
float speed;
float angle;
public:
Motor();
float getSpeed();
float getAngle();
virtual void setSpeed( float speed );
virtual void setAngle( float angle );

电机.cpp

#include "Motor.h"

float Motor::getSpeed() { return speed; }
float Motor::getAngle() { return angle; }

虚拟电机.h

#include "Motor.h"

class VirtualMotor: public Motor
{
private:
float lastSpeed;
public:
VirtualMotor();
void setSpeed(float speed);
void setAngle(float angle);
};

虚拟电机.cpp

#include "VirtualMotor.h"

VirtualMotor::VirtualMotor()
{
speed = 2;
angle = 5;
}

void VirtualMotor::setSpeed(float speed)
{
this->speed = speed;
}

void VirtualMotor::setAngle(float angle)
{
this->angle = angle;
}

main.cpp

#include <iostream>
#include "VirtualMotor.h"

using namespace std;

int main (int argc, char **argv)
{
VirtualMotor m;
cout << m.getSpeed() << endl;
m.setSpeed(9);
cout << m.getSpeed() << endl;

return 0;
}

为了编译,我使用命令 g++ Main.cpp Motor.cpp VirtualMotor.cpp -o main 并且我收到以下错误:

/tmp/ccIdYJaR.o: In function `VirtualMotor::VirtualMotor()':
VirtualMotor.cpp:(.text+0x29): undefined reference to `Motor::Motor()'
/tmp/ccIdYJaR.o: In function `VirtualMotor::VirtualMotor()':
VirtualMotor.cpp:(.text+0x5d): undefined reference to `Motor::Motor()'
/tmp/ccIdYJaR.o:(.rodata._ZTI12VirtualMotor[typeinfo for VirtualMotor]+0x8): undefined reference to `typeinfo for Motor'
collect2: ld returned 1 exit status

我觉得对此有一个非常简单的解决方案,但我就是看不到。我尝试使用 VirtualMotor::VirtualMotor() : Motor::Motor() 和其他变体,但没有任何运气。

最佳答案

在您的代码中,您声明了 Motor() 构造函数,但从未为其提供实现。此外,您似乎没有在头文件中使用 include guards。 motor.h 应该看起来像这样(尽管这与您询问的问题无关):

#ifndef INC_MOTOR_H
#define INC_MOTOR_H

class Motor
{
... // your stuff here
};
#endif

最后, protected 数据通常不是一个好主意。

关于c++ - 继承类中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com