好的,我在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

我应该怎么写我的getter或setter在这种情况下?

有帮助吗?

解决方案

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;

其他提示

struct A {
  A() : _n(0) {}
  int get_n() const {
    return _n;
  }
  void calculate(int a) {
    _n = a * a * a;
  }
private:
  int _n;
};

下面是一个完整的示例。如果你想有一个镜子set_n,而不是一些东西,操纵数据,那么你或许应该删除的getter / setter(如你会不正确地使用它们),使数据成员公开。

此外,还要记住:定义与struct工程类的相同导入定义类与class但有一个例外:公众而不是私人的会员和基地的默认访问

有不写为每个结构字段的getter / setter一个好主意。更好的解决方案是:

typedef struct {
    int field1;
    int field2;
} structType;

class MyClass {
private:
    structType _structName;
public:
    const structType & getStructName() const {
        return _structName;
    }
}

structTypeMyClass分开。使用吸气剂为:

MyClass m;
int var;
var = m.getStructName().field1;

是需要的,第一const返回一个常数值。需要用于常量-正确性第二个。

有两种方法来定义一个setter:

class MyClass {
// ...
public:
    // type 1
    void setStructName(const structType &s) {
        _structName = s;
    }
    // type 2
    structType & setStructName() {
        return _structName;
    }
}

使用第一个为:

MyClass m;
structType s;
m.setStructName(s);

的第二个版本,可以修改单独的结构域,以及:

m.setStructName() = s;
m.setStructName().field1 = 10;

请注意,如果结构包含指针的制定者可能需要一些调整。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top