C++ C样式结构,带有已删除的默认构造函数难题
假设我有一个C风格的结构,如下所示:C++ C样式结构,带有已删除的默认构造函数难题,c++,C++,假设我有一个C风格的结构,如下所示: typedef struct { const struct { int ac; int bc; } const_vars; int x; int y; } myCStruct; myCStruct sVar = {{123,678},0,0}; 我可以按如下方式初始化上述类型的变量
typedef struct {
const struct {
int ac;
int bc;
} const_vars;
int x;
int y;
} myCStruct;
myCStruct sVar = {{123,678},0,0};
我可以按如下方式初始化上述类型的变量:
typedef struct {
const struct {
int ac;
int bc;
} const_vars;
int x;
int y;
} myCStruct;
myCStruct sVar = {{123,678},0,0};
现在我决定使用上面的std::map
:
std::map<int,myCStruct,std::less<int>,myAllocator<std::pair<int,myCStruct>>> myMap;
std::map myMap;
执行此操作时,会出现编译错误:
错误:调用隐式删除的“myCStruct”默认构造函数
myMap
试图实例化myCStruct,但遇到一个已删除的默认构造函数。我知道默认的ctor因为结构的const
成员而被删除。我尝试将类型转换为C++样式结构,并定义了默认的cTor,但是后来我被卡住,无法初始化变量<代码> MyCuStReVSAR< /COD>,因为编译器找不到匹配的CtoR。
问题1。本例中的匹配ctor是否将std::initializer\u list
、int
和int
作为参数
问题2。这是一个玩具示例,我的实际用例有点复杂,编写一个匹配的ctor将是乏味的(而且似乎有些过分)。我有更多这样的类型,所以我必须为所有类型复制这些类型。如上所示定义
myCStruct sVar
的便利性是无与伦比的!我有一个简单的输出吗?显示myAllocator
的声明。如果我用STD::ApLooalt编译它。在C++中没有这样的“C样式结构”,这就是我们所说的“结构”,所有的意思是“所有属性默认是公共的”。是的,“TADMAN是正确的,没有C风格结构。我很困惑。。。