1

私はこれが欲しいです:

class Test {
  private:
    int a;

  public:
    int a();
    int setA(int val);
}

Qtlibrarayはこれを常に行っているように私には思えます。しかし、「declarationblabla」コンパイラエラーが発生します。何故ですか?メソッドに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;}
}

これも機能しません。

4

1 に答える 1

4

Qt自体では、データメンバーは通常Privateクラス(Pimplイディオム)にあるため、問題にはなりません。Pimplを使用しない場合(これは少し面倒で、バイナリ互換性を保証する必要がある場合、またはインクルードの削減が十分な効果をもたらす非常に大規模なプロジェクトがある場合にのみ本当に必要です)、最も一般的な方法はメンバーを付加することです接頭辞付き、例:m_:

    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;

もう1つの利点は、メンバー変数とローカル変数が常に互いに区別しやすいことです。

代替案:

  • this->a(m_aよりも退屈な)を介して変数にアクセスします
  • getA()を使用します(醜いAPI、IMHOを作成しますが、もちろんAPIスタイルによって異なります-他のすべてがget *を使用する場合は、それに続く必要があります)
于 2013-01-08T12:36:22.613 に答える