[英]Compile error on constructor using pointer to constant c-string
有人可以解释为什么我可以编译并运行这个吗
T t1( T2( "TEST") );
t1.print();
但不是这个
const char * TEST_STRING = "TEST";
T t1( T2( TEST_STRING ) );
t1.print();
第二块展示
错误:请求在非类类型“ T(T2)”的“ t1”中请求成员“ print”
这些课程如下
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
谢谢
感谢immibis , Richard Critten , aschepler和wiki的所有评论
问题是因为
T t1( T2( TEST_STRING ) );
可以解释为
它被解释为函数声明。
来自aschepler的两个可能的干净修复
另一个解决方法:
T t1( static_cast<T2>( TEST_STRING ) );
或者只是:
T t1(( T2(TEST_STRING) ));
(在声明符的周围允许有多余的括号,但在完整的函数参数的周围则不允许,因此,这不可能意味着函数声明。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.