我想问一个问题,即使我在该类的任何地方都不需要它,编译器为什么会说“ 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;
}
答案 0 :(得分:1)
您的StaticObject
构造函数没有调用任何非默认的Object
构造函数,因此将为基类调用默认构造函数,因此您当前的代码确实默认的Object
构造函数。