访问结构变量吸气设定器内部在C ++类
题
好的,我在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;
}
}
请structType
和MyClass
分开。使用吸气剂为:
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;
请注意,如果结构包含指针的制定者可能需要一些调整。
不隶属于 StackOverflow