类不存在默认构造函数
时间: 2023-10-22 13:08:01 浏览: 177
没有合适的默认构造函数,默认构造函数怎么写?为什么这样写?没有写赋值构造函数
当一个类没有默认构造函数时,我们必须使用带有初始化列表的构造函数来创建该类的对象。这种情况通常出现在以下几种情况下:
1. 类的成员类型是没有默认构造函数的类。如果没有提供显示初始化式,编译器将尝试使用成员类型的默认构造函数来初始化该成员。但是,如果成员类型没有默认构造函数,则编译器将无法成功初始化该成员。
例如,考虑一个名为NoDefaultConstructor的类,它没有默认构造函数。如果我们在另一个类ListInitializing中使用NoDefaultConstructor作为成员类型,我们需要在ListInitializing的构造函数中使用初始化列表来显式初始化该成员:
```cpp
class NoDefaultConstructor {
public:
int data;
NoDefaultConstructor(int data) : data(data) {}
};
class ListInitializing {
public:
NoDefaultConstructor noDefaultConstructor;
ListInitializing(string str) : noDefaultConstructor(0) {}
};
```
2. 类的成员是const成员或引用类型。因为const对象或引用类型只能进行初始化,不能对它们进行赋值,所以我们必须在构造函数的初始化列表中对它们进行初始化。
例如,如果我们在类ListInitializing中有一个string类型的引用成员str,我们必须在构造函数的初始化列表中对它进行初始化:
```cpp
class ListInitializing {
public:
string& str;
ListInitializing(string str) : str(str) {}
};
```
在以上的示例代码中,我们使用了初始化列表来分别初始化了没有默认构造函数的成员和引用类型的成员。
总之,当一个类不存在默认构造函数时,我们需要使用初始化列表的构造函数来创建该类的对象,并在初始化列表中对所有成员进行显式初始化。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [C++ 学习](https://blog.csdn.net/TQCAI666/article/details/115225412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [类的组合中对象成员初始化及报错“类不存在默认构造函数”](https://blog.csdn.net/m0_64732031/article/details/122936513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文