c++ - 为什么嵌套的构造函数调用不编译?

标签 c++

<分区>

为什么以下不编译:

typedef int Table;

class FullObjId 
{
public:
    explicit FullObjId( const Table* i ) {}
};

class TableInfo 
{
public:
    TableInfo( const FullObjId& o ) {}
    bool isValid() { return true; }
};

void dataSourceForHist( const Table& table )
{
   // The next line gives an error
   TableInfo tableInfo( FullObjId( &table ) );
   // Unless it's written like this:
   //TableInfo tableInfo( ( FullObjId( &table ) ) );

   if (!tableInfo.isValid())
   {
      ...
   }
}

我已尝试使用适用于 Linux 的英特尔编译器 12.1,并使用 http://gcc.godbolt.org/使用 g++ 4.8、icc 13.0、clang 3.4.1。 我尝试过的所有编译器都给出如下错误:

error: request for member ‘isValid’ in ‘tableInfo’, which is of non-class type ‘TableInfo(FullObjId&)’

最佳答案

这个问题(也称为最烦人的解析)依赖于以下事实:

TableInfo tableInfo( FullObjId( &table ) );

is interpreted as a function声明。

假设您使用的是 C++11,您应该使用:

TableInfo tableInfo{ FullObjId( &table ) };

Live demo

相反。

或者,您可以添加额外的括号(适用于 C++03):

TableInfo tableInfo( (FullObjId( &table )) );

Live demo

关于c++ - 为什么嵌套的构造函数调用不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037445/

相关文章:

c++ - "error: invalid conversion from ' 整数* ' to ' 整数 ' function"

C++ copy c'tor 现在开始行动了。不清楚为什么

c++ - GDB 如何知道它必须在指定的断点处中断?

c++ - 不命名 C++ 中的类型

c++ - 如何使用Rcpp初始化mappedsparsematrix

c++ - 在相应的 promise 离开范围后有效使用 future

C++函数模板编译

c++ - std::string 的引用计数

c++ - D3D12CreateDevice 抛出 _com_error

c++ - LLVM 教程 --system-libs 不存在