C++ &引用;“不存在默认构造函数”;即使我不知道';我不需要它

C++ &引用;“不存在默认构造函数”;即使我不知道';我不需要它,c++,constructor,default-constructor,C++,Constructor,Default Constructor,我想问一下,为什么我的编译器会说“类对象不存在默认构造函数”,尽管我在该类的任何地方都不需要它 我不应该使用默认构造函数(明确地说,我只需要一个参数id为的参数化构造函数) 我试着去想为什么它需要默认构造函数,但我就是看不出来。比如,即使在标题中,我也需要对象的构造函数 我也一直在搜索谷歌,但它也没有回答我的问题,或者如果它回答了我的问题,我就是无法理解它并将其应用到我的例子中 这是我的目标 #pragma一次 #ifndef对象 #定义对象 类对象 { 公众: 对象(int-aId); 虚拟~

我想问一下,为什么我的编译器会说“类对象不存在默认构造函数”,尽管我在该类的任何地方都不需要它

我不应该使用默认构造函数(明确地说,我只需要一个参数id为的参数化构造函数)

我试着去想为什么它需要默认构造函数,但我就是看不出来。比如,即使在标题中,我也需要对象的构造函数

我也一直在搜索谷歌,但它也没有回答我的问题,或者如果它回答了我的问题,我就是无法理解它并将其应用到我的例子中

这是我的目标

#pragma一次
#ifndef对象
#定义对象
类对象
{
公众:
对象(int-aId);
虚拟~Object(){};
int getId()常量;
双getX()常量;
双getY()常数;
无效setX(双斧);
void setY(双y);
私人:
int-id;
双x;
双y;
};
#endif/!对象
这是我的Object.cpp

#包括“Object.h”
对象::对象(int-aId)
{
这个->id=aId;
}
int对象::getId()常量
{
返回此->id;
}
双对象::getX()常量
{
返回此->x;
}
双对象::getY()常量
{
返回此->y;
}
void对象::setX(双aX)
{
这->x=aX;
}
void对象::setY(双Y)
{
这->y=aY;
}
这是我在其中获取错误的类的头文件

#pragma一次
#ifndef静态对象
#定义静态对象
#包括“Object.h”
枚举类障碍类型{Rock,SmallFlower,BigFlower};
类StaticObject:公共对象{
公众:
StaticObject(int-aId,ObstacleType-aObstacleType);
ObstacleType&getObstacleType();
私人:
障碍类型障碍类型;
};
#endif/!静态对象
在第4行,从一个括号开始,我得到一个错误,说“类对象中不存在默认构造函数”,即使我不需要它,即使我没有在块中放入任何东西,它也一直这么说

#包括“StaticObject.h”
StaticObject::StaticObject(int-aId,ObstacleType-aObstacleType)
{//obstacleType=aObstacleType;
}
ObstacleType&StaticObject::getObstacleType(){
返回此->obstacleType;
}

您的
静态对象
构造函数没有调用任何非默认的
对象
构造函数,因此将为基类调用默认构造函数,因此您当前的代码确实需要一个默认的
对象
构造函数。

副本回答了这个问题。但是,作为一个设计问题,记住每个构造函数都构造所有的基。这是类型安全的基础;要创建一个未正确构造的对象,您必须非常努力。如果构造函数没有显式构造类的“基”,编译器将生成使用默认构造函数的代码。