以嵌套类的教育代码为例:
class enclose {
struct nested { // private member
void g() {}
};
public:
static nested f() { return nested{}; }
};
int main() {
//enclose::nested n1 = e.f(); // error: 'nested' is private
enclose::f().g(); // OK: does not name 'nested'
auto n2 = enclose::f(); // OK: does not name 'nested'
n2.g(); }
将此代码复制并粘贴到Microsoft Visual Studio 2012时,我在行中出现错误
static nested f() { return nested{}; }
其中问题与函数返回嵌套的方式有关。这不是我第一次看到代码以这种方式返回值,但我通常会忽略它并以更长的方式执行它。这是编译器问题吗?
答案 0 :(得分:5)
该行
return nested{};
使用新的C ++ 11 braced-initialization和value-initializes对象。正如您所见here,Visual Studio 2012(VC11)不支持支撑初始化,因此您会收到编译时错误。
唯一的解决方案是使用
return nested();
代替,或者更新你的编译器。