即使我不需要“没有默认构造函数”

时间:2019-10-12 12:45:32

标签: c++ constructor default-constructor

我想问一个问题,即使我在该类的任何地方都不需要它,编译器为什么会说“ Object的默认构造函数不存在”。

我应该不使用默认的构造函数(明确地说,我只需要一个参数ID为full assignment can be found on this link的参数化构造函数)

我试图考虑它为什么需要默认构造函数的原因,但我只是看不到它。就像,即使在标头中也不需要对象的构造函数。

我也一直在搜索google,但它也无法回答我的问题,或者如果我不能理解,就将其应用于我的示例。

这是我的Object.h

#pragma once
#ifndef OBJECT_H
#define OBJECT_H
class Object
{
public:
    Object(int aId);
    virtual ~Object() {};
    int getId() const;
    double getX() const;
    double getY() const;
    void setX(double aX);
    void setY(double aY);
private:
    int id;
    double x;
    double y;
};

#endif //!OBJECT_H

这是我的Object.cpp

#include "Object.h"

Object::Object(int aId)
{
    this->id = aId;
}

int Object::getId() const
{
    return this->id;
}

double Object::getX() const
{
    return this->x;
}

double Object::getY() const
{
    return this->y;
}

void Object::setX(double aX)
{
    this->x = aX;
}

void Object::setY(double aY)
{
    this->y = aY;
}

这是我收到错误的类的头文件

#pragma once
#ifndef STATIC_OBJECT_H
#define STATIC_OBJECT_H

#include "Object.h"

enum class ObstacleType { Rock, SmallFlower, BigFlower };
class StaticObject : public Object {

public:
    StaticObject(int aId, ObstacleType aObstacleType);
    ObstacleType& getObstacleType();
private:
    ObstacleType obstacleType;
};


#endif // !STATIC_OBJECT_H

在第4行,这里以方括号开头,即使我在那里不需要它,即使我没有在块中放置任何内容,我也收到错误消息:“在对象类中不存在默认构造函数”这样说。

#include "StaticObject.h"

StaticObject::StaticObject(int aId, ObstacleType aObstacleType)
{   // <-- compilator error shows here
    Object* obj = new Object(aId);
    this->obstacleType = aObstacleType;
}

ObstacleType& StaticObject::getObstacleType() {
    return this->obstacleType;
}

1 个答案:

答案 0 :(得分:1)

您的StaticObject构造函数没有调用任何非默认的Object构造函数,因此将为基类调用默认构造函数,因此您当前的代码确实默认的Object构造函数。