我刚刚遇到了以下问题:
#include "stdafx.h"
#include <string>
#include <iostream>
class transaction{
protected:
transaction(const std::string& log) { printLog(log); }
private:
void printLog(const std::string& log) const { std::cout << log << "\n"; }
};
class inTrans : public transaction {
public:
inTrans() : transaction( std::string("input") ) { }
};
class outTrans : public transaction {
public:
outTrans() : transaction{ std::string("output") } { } //This doesn't work
};
Visual Studio 2013 标记第一个“{”-red 并显示以下错误:
问题是我仍然能够编译文件,而且一切似乎都运行得很好。
那么为什么我会收到这个奇怪的错误呢?
最佳答案
如果我们查看 C++ 标准草案,12.6.2
初始化基数和成员部分中的语法表明您拥有的是有效语法,因此错误是一个错误:
ctor-initializer:
: mem-initializer-list
mem-initializer-list:
mem-initializer ...opt
mem-initializer , mem-initializer-list ...opt
mem-initializer:
mem-initializer-id ( expression-listopt)
mem-initializer-id braced-init-list <-- this applies to this case
该代码也可以很好地编译
gcc
和 clang
关于c++ - 无法使用大括号初始化智能感知错误调用基类构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26143344/