我想用另一个类的成员字段初始化一个成员字段。
// 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'
如何解决?
答案 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
现在可以了,它不是“单点故障”,但是可以。