好的,我在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?
答案 0 :(得分: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;
答案 1 :(得分: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
而不是一个操纵数据的东西,那么你应该放弃getter / setter(因为你错误地使用它们)并将数据成员公开。
另外,请记住:使用struct
定义类相同以定义具有class
的类但是有一个例外:public而不是private作为成员和库的默认访问权限
答案 2 :(得分:0)
为每个结构字段编写一个getter / setter方法不是一个好主意。更好的解决方案是:
typedef struct {
int field1;
int field2;
} structType;
class MyClass {
private:
structType _structName;
public:
const structType & getStructName() const {
return _structName;
}
}
保持structType
和MyClass
分开。将吸气剂用作:
MyClass m;
int var;
var = m.getStructName().field1;
需要第一个const
返回const值。 const-correctness需要第二个。
有两种方法来定义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;
请注意,如果结构包含指针,则setter可能需要进行一些调整。