所以我试图将多态性实现到战舰程序的开头,但我不断收到一个intellisense错误,告诉我当我尝试调用基类构造函数时,我的一个标识符是未定义的。
这是基类的代码,Ship.h:
#ifndef SHIP_H
#define SHIP_H
#include <iostream>
class Ship
{
public:
Ship(int, int);
void setX(int);
int getX() const;
void setY(int);
int getY() const;
private:
int x;
int y;
};
#endif
以及它的构造函数
#include "Ship.h"
using namespace std;
Ship::Ship(int userX, int userY)
{
setX(userX);
setY(userY);
}
派生类标题:
#ifndef FRIGATE_H
#define FRIGATE_H
#include "Ship.h"
class Frigate : public Ship {
public:
Frigate(int);
void placeShip();
void setLength(int);
int getLength() const;
private:
int length;
};
#endif
及其构造函数
#include <iostream>
#include "Frigate.h"
using namespace std;
Frigate::Frigate(int specLength) : Ship(userX, userY)
{
setLength(specLength);
}
当我尝试在此处调用船舶构造函数时,我一直收到错误,说明标识符userX
和userY
未定义,但我在基类的构造函数中定义了它们。我做错了什么?
答案 0 :(得分:2)
您的基类构造函数有2个参数。派生类构造函数只接受一个参数。当调用派生类的构造函数时,它将调用基类构造函数,但是你需要给它所需的2个值......
我认为Frigate
类的构造函数应该看起来像
Frigate::Frigate(int userX, int userY, int specLength) : Ship(userX, userY), length(specLength)
{
}