有人可以解释为什么我可以编译并运行这个
T t1( T2( "TEST") );
t1.print();
但不是这个
const char * TEST_STRING = "TEST";
T t1( T2( TEST_STRING ) );
t1.print();
第二个街区显示
错误:请求't1'中的成员'print',这是非类型'T(T2)'
课程如下
class T2 {
public:
T2( const char * str ) {
m_str = str;
}
void test() const {
cout << "t2 test" << m_str << endl;
}
private:
const char * m_str;
};
class T {
public:
T( const T2 & t2 ) {
t2.test();
}
void print() {
cout << "t print " << endl;
}
};
我的g ++版本是
g ++(Ubuntu 5.4.0-6ubuntu1~16.04.9)5.4.0 20160609
谢谢
答案 0 :(得分:1)
感谢immibis,Richard Critten,aschepler和wiki
的所有评论问题是因为
T t1( T2( TEST_STRING ) );
可以解释为
并将其解释为函数声明。
的两个可能的干净修复另一种解决方法:
T t1( static_cast<T2>( TEST_STRING ) );
或者只是:
T t1(( T2(TEST_STRING) ));
(允许使用额外的括号 围绕一个声明器,但不是一个完整的函数参数,所以 不可能是一个函数声明。)