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

标签 c++ inheritance constructor polymorphism

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

这是基类 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 未定义,但我在构造函数中为基类。我做错了什么?

最佳答案

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

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

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

关于C++多态构造函数错误;标识符未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922838/

相关文章:

c++ - 在 std::map 中设置所有值

c++ - 在Qt中获取qrc文件的路径

c++ - 继承类的内存布局

c++ - 不能引用派生模板类中的基类成员

父返回子中的 C++ 函数

c++ - std::unique_ptr::reset 和构造函数异常

c++ - 将 Int 指针转换/类型转换为 char 指针,但获取 ascii 字符?

c++ - MPI_File_read 错误

c++ - 调用函数时首选错误的参数转换

c++ - gcc 4.8.2 在此默认的默认构造函数中调用复制构造函数是否正确?