首先不要惊慌。这是一个非常简单的程序。 使用" g ++ -Wall -pedantic Main.cpp"编译Main.cpp时出现此错误。 这是我的所有档案。是什么导致未定义的引用错误?
Main.cpp的
#include <iostream>
#include "BMWLogo.h"
#include "Engine.h"
#include "IVehicle.h"
#include "Car.h"
#include "BMW.h"
int main() {
BMW* bmw = new BMW();
Car* car = bmw;
std::cout << car->getName() << std::endl;
}
IVehicle.h
class IVehicle {
public:
IVehicle();
virtual std::string getName();
virtual float getCurrentSpeed();
};
IVehicle.cpp
#include "IVehicle.h"
IVehicle::IVehicle() {
}
virtual std::string IVehicle::getName() {
}
virtual float IVehicle::getCurrentSpeed() {
}
Car.h
class Car : public IVehicle {
private:
std::string name;
float currentSpeed;
Engine* engine;
public:
Car(std::string name);
void setCurrentSpeed(float currentSpeed);
float getCurrentSpeed();
std::string getName();
};
Car.cpp
#include "Car.h"
Car::Car(std::string name) {
this->name = name;
engine = new Engine();
}
void Car::setCurrentSpeed(float currentSpeed) {
this->currentSpeed = currentSpeed;
}
float Car::getCurrentSpeed() {
return currentSpeed;
}
std::string Car::getName() {
return name;
}
BMW.h
class BMW : public Car {
private:
BMWLogo* bmwLogo;
public:
BMW();
};
BMW.cpp
#include "BMW.h"
BMW::BMW()
: Car("BMW") {
bmwLogo = new BMWLogo();
}
Engine.h
class Engine {
Engine();
};
Engine.cpp
#include "Engine.h"
Engine::Engine() {
}
BMWLogo.h
class BMWLogo {
BMWLogo();
};
BMWLogo.cpp
#include "BMWLogo.h"
BMLogo::BMWLogo() {
}
答案 0 :(得分:0)
您错过了IVehicle
构造函数的定义。
答案 1 :(得分:0)
乍一看,我认为需要在Car.h中引用IVehicle.h
#include "IVehicle.h"
答案 2 :(得分:0)
这与您提出的问题有所不同,但您可能需要注意后者,请参阅您的代码:
Car::Car(std::string name) {
name = name;
engine = new Engine();
}
您可能希望更改参数名称,以便它不隐藏名称的类实例。尝试:
Car::Car(std::string p_name) {
name = p_name;
engine = new Engine();
}