错误:can';创建对象后不分配区域 我学习C++中的OOP的各种细节,并编写了代码。该代码的目的是玩弄ctor初始值设定项,并学习如何将作为类属性的引用初始化 #include <string> #include <iostream> using namespace std; class Corgi { private: const string nickname; const string& rNickname; public: Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {} }; int main() { Corgi buddy("buddy"); return 0; }
我不明白为什么我会收到这个错误消息,以及如何修复它。那么,我为什么要得到它,以及如何修复它 非常感谢您的帮助。错误:can';创建对象后不分配区域 我学习C++中的OOP的各种细节,并编写了代码。该代码的目的是玩弄ctor初始值设定项,并学习如何将作为类属性的引用初始化 #include <string> #include <iostream> using namespace std; class Corgi { private: const string nickname; const string& rNickname; public: Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {} }; int main() { Corgi buddy("buddy"); return 0; },c++,constructor,reference,C++,Constructor,Reference,我不明白为什么我会收到这个错误消息,以及如何修复它。那么,我为什么要得到它,以及如何修复它 非常感谢您的帮助。Corgi(const字符串和昵称):昵称(昵称),rNickname(昵称){} 用自身初始化成员昵称,这是一个问题,因为成员昵称此时未初始化 解决方案: Corgi(常量字符串和昵称):昵称(\u昵称),rNickname(昵称){} 我还考虑了这一点: Corgi(const字符串和昵称):昵称(昵称),rNickname(昵称){} 这将有助于正确初始化Corgi::n
Corgi(const字符串和昵称):昵称(昵称),rNickname(昵称){}
用自身初始化成员昵称
,这是一个问题,因为成员昵称
此时未初始化
解决方案:
Corgi(常量字符串和昵称):昵称(\u昵称),rNickname(昵称){}
我还考虑了这一点:
Corgi(const字符串和昵称):昵称(昵称),rNickname(昵称){}
这将有助于正确初始化Corgi::nickname
(由于范围规则),但它为Corgi::rNickname
引入了一个新问题(现在通过引用构造函数参数进行初始化)
对于这种情况,正确的答案是:
Corgi(const字符串和昵称):昵称(昵称),rNickname(this->昵称){}
昵称(昵称)->昵称(\u昵称)。在编译过程中,您至少应该得到一个未使用变量昵称的警告。gcc甚至明确表示:“Corgi::昵称”是用itself@mfnx我使用CLion,看不到任何警告。关于此,仅供参考:。
Project(1343,0x7fff7b2f2000) malloc: *** mach_vm_map(size=140734714511360) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc