我想要这个:
class Test {
private:
int a;
public:
int a();
int setA(int val);
}
在我看来,Qt libraray一直都是这样做的。 但我得到一个“声明blabla”编译器错误。这是为什么? 我真的必须将方法命名为 getA()吗?
我甚至尝试过使用Q_PROPERTY:
class Test : public QObject {
Q_OBJECT
Q_PROPERTY(int a READ a WRITE setA)
public:
int a(){return a}
int setA(int val){a=val;}
}
这也行不通。
答案 0 :(得分:4)
在Qt本身,数据成员通常属于私有类(Pimpl idiom),所以这不是问题。 如果你不使用Pimpl(这有点单调乏味,只有你必须保证二进制兼容性,或者有一个非常大的项目,其中reduce包含有足够的效果),最常见的方法是预先添加成员带有前缀,例如米_:
Q_PROPERTY(int a READ a WRITE setA)
public:
void setA( int a ) { m_a = a; }
int a() const { return m_a; }
private:
int m_a;
另一个优点是成员和局部变量总是很容易相互分辨。
备选方案:
this->a
访问变量(比m_a更繁琐)