struct foo
{
struct bar {
~bar() {} // no error w/o this line
};
bar *data = nullptr; // no error w/o this line
foo() noexcept = default; // no error w/o this line
};
是的,我知道,有一個與正是另一個問題標題相同,但結構稍有不同的問題(涉及noexcept
操作並沒有嵌套的類型)。該解決方案建議有(與「在成員函數外部封裝類的定義中需要的默認成員初始值設定項」 - 是我的代碼格式不正確嗎?
foo() noexcept {}
更換的foo
構造函數)改變語義,它沒有必要在這裏:我們這裏有一個更好的答案(因此這個問題不是一個重複)。
編譯:Apple LLVM version 9.0.0 (clang-900.0.37)
,完整的錯誤信息:
test.cc:44:5: error: default member initializer for 'data' needed within definition of enclosing class 'foo' outside of member functions
foo() noexcept = default;
^
test.cc:41:10: note: default member initializer declared here
bar* data = nullptr;
^
你可以只declarare析構函數在'bar'和將其定義在課堂外。這種方式編譯。 – skypjack
這是一個鏗鏘蟲。 – Oliv
[「在成員函數外部封裝類的定義中需要的默認成員初始值設定項」的可能重複項是否是我的代碼格式不正確?](https://stackoverflow.com/questions/43819314/default-member-initializer-needed- within-definition-of-enclosing-class-outside) –