C ++多态性构造函数错误;标识符未定义

时间:2017-05-11 18:13:53

标签: c++ inheritance constructor polymorphism

所以我试图将多态性实现到战舰程序的开头,但我不断收到一个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);
}

当我尝试在此处调用船舶构造函数时,我一直收到错误,说明标识符userXuserY未定义,但我在基类的构造函数中定义了它们。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的基类构造函数有2个参数。派生类构造函数只接受一个参数。当调用派生类的构造函数时,它将调用基类构造函数,但是你需要给它所需的2个值......

我认为Frigate类的构造函数应该看起来像

Frigate::Frigate(int userX, int userY, int specLength) : Ship(userX, userY), length(specLength)
{
}