2

さて、私はC ++で次のようなものを持っています:

class MyClass{
private:
  int someVariable;
  int someOtherVariable;

  struct structName{
    int someStructVariable;
    int someOtherStructVariable;
  };//end of struct

public:
  //getters & setters for the defined variables.

  int getSomeStructVariable()
  {
    // this does not work I get this error: "error: expected primary-expression
    // before '.' token"
    return structName.someStructVariable;
  } 
};//end of class

この場合、ゲッターまたはセッターをどのように記述すればよいですか?

4

3 に答える 3

9

structName変数名ではなく、型名の一部です。次のような名前を付ける必要があります。

struct structName {
  int someStructVariable;
  int someOtherStructVariable;
} myStructure;

そして、アクセサーで次を使用します。

return myStructure.someStructVariable;

それはあなたが望む結果を得るはずです。構造体変数の他の代替方法は、変数宣言から構造体定義を分離することです。

struct structName {
  int someStructVariable;
  int someOtherStructVariable;
};

struct structName myStructure;

または追加するにはtypedef

typedef struct structName {
  int someStructVariable;
  int someOtherStructVariable;
} structTypedefName;

structTypedefName myStructure;
于 2009-10-30T20:53:38.440 に答える
1
struct A {
  A() : _n(0) {}
  int get_n() const {
    return _n;
  }
  void calculate(int a) {
    _n = a * a * a;
  }
private:
  int _n;
};

これが完全な例です。データを操作するものではなくミラーが必要なset_n場合は、おそらくゲッター/セッターを削除して (間違って使用しているため)、データ メンバーを公開する必要があります。

また、覚えておいてください: を使用してクラスを定義することは、1 つの例外を除いて、メンバーとベースの既定のアクセスとしてプライベートではなくパブリックを使用してクラスを定義することと同じstructように機能します。class

于 2009-10-30T20:57:54.517 に答える