【问题标题】:C++ Polymorphism constructor error; Identifier is undefinedC++ 多态构造函数错误;标识符未定义
【发布时间】:2017-10-10 21:28:02
【问题描述】:

所以我试图在战舰程序的开头实现多态性,但是当我尝试调用基类构造函数时,我不断收到一个智能感知错误,告诉我其中一个标识符未定义。

这是基类 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);
}

当我尝试在这里调用 ship 构造函数时不断收到错误消息,指出标识符 userXuserY 未定义,但我在基类的构造函数中定义了它们。我做错了什么?

【问题讨论】:

  • Frigate 初始化程序中,您将未定义的变量userXuserY 传递给基类构造函数,并且您的编译器正确地告诉您它不知道这些变量。

标签: c++ inheritance constructor polymorphism


【解决方案1】:

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

我认为Frigate 类的构造函数应该是这样的

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

【讨论】:

  • 除非他想随机化它,在这种情况下,您必须在调用随机后从Frigate 构造函数的主体内部调用基本构造函数。我不知道,只是猜测他可能想要什么。
  • @Donnie 在这种情况下,他需要为 Ship 定义一个默认(空)构造函数,因为在执行构造函数的主体之前需要完成调用链。正如你所说,我们并不完全确定他想要什么。
  • 谢谢,我知道这是我忘了做的小事。
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
相关资源
最近更新 更多