繁体   English   中英

使用指向常量C字符串的指针在构造函数上编译错误

[英]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

谢谢

感谢immibisRichard Crittenascheplerwiki的所有评论

问题是因为

T t1( T2( TEST_STRING ) );

可以解释为

  1. 以T2作为参数并返回T的函数名称t1的函数声明
  2. 使用类T2的匿名实例初始化的类T的t1变量定义。

它被解释为函数声明。

来自aschepler的两个可能的干净修复

另一个解决方法: T t1( static_cast<T2>( TEST_STRING ) );

或者只是: T t1(( T2(TEST_STRING) )); (在声明符的周围允许有多余的括号,但在完整的函数参数的周围则不允许,因此,这不可能意味着函数声明。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM