我不断收到错误消息,说明"原型为< void Engine :: start(Tank&)'与班级中的任何一个都不匹配'引擎'"此外,它说"'坦克'尚未宣布,"所有这些都具有相同的功能“开始”#39;在Engine类中。
//Engine.h
#ifndef ENGINE_H
#define ENGINE_H
using namespace std;
class Engine {
public:
Engine(int);
~Engine() {};
void setTrip(int tr);
int getTrip();
bool isStarted();
void start(Tank &inTank);
void stop();
protected:
bool started;
int trip, numCyl;
};
#endif /* ENGINE_H */
//Engine.cpp
using namespace std;
#include "Engine.h"
#include "Tank.h"
这个.cpp还有更多,但这是错误所在的函数 发生。
void Engine::start(Tank &inTank) {
if(inTank.isEmpty()) {
cout << "Engine cannot start\n";
started = false;
}
else {
cout << "Engine started\n";
started = true;
}
}
我的主要用于测试这两个类。
#include "Tank.h"
#include "Engine.h"
#include <cstdlib>
using namespace std;
int main()
{
Tank t(12);
Engine e(4);
e.start(t);
e.stop();
t.refuel();
e.start(t);
e.stop();
return 0;
}
我将添加我的坦克课程。
#ifndef TANK_H
#define TANK_H
using namespace std;
class Tank {
public:
Tank(float);
virtual ~Tank();
void consumeFuel(float);
float getFuel();
virtual void refuel();
bool isEmpty();
int getNumTanks();
float getTankCapacity();
void setFuel(float fl);
protected:
static int numTanks;
const float tankCapacity;
float fuel;
bool empty;
};
#endif /* TANK_H */
Tank.cpp
using namespace std;
#include "Tank.h"
#include "Engine.h"
//creates tank with certain capacity taken from parameter.
Tank::Tank(float inCap) {
Tank::tankCapacity(inCap);
}
//I completed the rest of the functions with no errors... so far.lul
答案 0 :(得分:4)
每当引用或指针在头中使用类时,您需要转发声明该类而不是包括整个.h文件。
因此,在您的情况下,您只需要在Engine.h中转发声明类Tank并在Engine.cpp中包含Tank.h。
//Engine.h
#ifndef ENGINE_H
#define ENGINE_H
//Forward Declaration
class Tank;
using namespace std;
class Engine {
public:
Engine(int);
~Engine() {};
void setTrip(int tr);
int getTrip();
bool isStarted();
void start(Tank &inTank);
void stop();
protected:
bool started;
int trip, numCyl;
};
#endif /* ENGINE_H */
答案 1 :(得分:0)
将Tank类声明移到Engine类
之上