【发布时间】:2020-10-11 12:02:39
【问题描述】:
在下面的例子中,为什么我不能调用 car.getFuelConsumption
class Road {
public:
double length(); // km
int speed(); // km per hour ;
};
class Car {
protected:
virtual double getFuelConsumption(int speed_in_km) = 0;
};
class Tank: public Car{
public:
double getFuelConsumption(int speed_in_km) {
return 1;
}
};
double getPetrol(std::vector<Road> roads, const Car &car) {
double total_fuel_consumption=0;
for (int i=0;i<roads.size();++i)
{
double fuel_consumption_per_road = car.getFuelConsumption(roads[i].speed());
}
return total_fuel_consumption;
}
每辆车都有这样的方法,为什么我不能调用它?例如,如果我将 Tank 发送到 getPetrol(),那么我希望它能够正常工作并调用 Tank 版本的 getFuelConsumption()
Undefined symbols for architecture x86_64: "Road::speed()", referenced from: getPetrol(std::__1::vector<Road, std::__1::allocator<Road> >, Car const&) in main.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
【问题讨论】:
-
car.getFuelConsumption不是调用函数的方式。做例如total_fuel_consumption += car.getFuelConsumption(some_speed_value);是调用函数并使用其返回值的方式。 -
尝试了解动态与静态绑定。
-
我知道,但我只是想举个简单的例子
-
如果您遇到构建错误,您应该同时包含导致错误的minimal reproducible example 以及实际错误本身(复制粘贴为文本,完整且完整),并cmets 在出现错误的行上。也请花一些时间阅读How to Ask,以及this question checklist。
-
该错误表明
Road::speed函数不存在(它未定义,即未实现)。它是否在您忘记包含在项目中或忘记构建的其他源文件中实现?
标签: c++ class methods runtime-error