无法使用大括号初始化intellisense错误调用基类构造函数

时间:2014-10-01 14:07:13

标签: c++ constructor visual-studio-2013 intellisense base-class

我刚遇到以下问题:

#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并显示以下错误:

  

“错误保护函数”transaction :: transaction(const std :: string&amp; log)“(在第7行声明)无法通过”事务“指针或对象访问。”

问题是我仍然能够编译文件,一切似乎都运行得很好。 那么为什么我会得到这个奇怪的错误?

1 个答案:

答案 0 :(得分:4)

如果我们查看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

代码也适用于gccclang