用另一个类的成员字段初始化成员字段

时间:2018-06-22 14:20:01

标签: c++ const member

我想用另一个类的成员字段初始化一个成员字段。

// a.hpp
class A {
public:
    std::string m_protocol_field_end{"\n"}; // should be changeable, therefore no const
...

// b.hpp
class B {
public:
    const std::string m_protocol_field_end{A::m_protocol_field_end}; // should NOT be changeable, therefore const

我收到此错误:

error: invalid use of non-static data member 'A::m_protocol_field_end'

如何解决?

2 个答案:

答案 0 :(得分:0)

一种解决方案是在构造函数中获取值,例如,如果将class B { public: B(const string& protocol_field_end) : m_protocol_field_end(protocol_field_end) {} const std::string m_protocol_field_end; }; 更改为此:

const A myA;
const B myB{ myA.m_protocol_field_end };

这将使您在代码中做更多类似的事情:

ID      Date      
aa1    4/1/2015    
aa1    10/1/2015    
aa1    4/1/2016    
aa1    7/1/2015   
aa1    1/1/2016    
aa1    1/1/2015    
aa2n   4/1/2017    
aa2n   10/1/2017    
aa2n   10/1/2016   
aa2n   1/1/2017   
aa2n   7/1/2017    

答案 1 :(得分:0)

我想我有一个答案:

const std::string protocol_field_end_default{"\n"};

// a.hpp
class A {
public:
    std::string m_protocol_field_end{protocol_field_end_default}; // should be changeable, therefore no const
...

// b.hpp
class B {
public:
    const std::string m_protocol_field_end{protocol_field_end_default}; // should NOT be changeable, therefore const

现在可以了,它不是“单点故障”,但是可以。