代码之家  ›  专栏  ›  技术社区  ›  Asad Khan

在C++类中获取GETT设置器中的结构变量

  •  2
  • Asad Khan  · 技术社区  · 17 年前

    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?

    2 回复  |  直到 17 年前
        1
  •  9
  •   Carl Norum    17 年前

    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;
    
        2
  •  1
  •   Roger Pate Roger Pate    17 年前
    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

        3
  •  0
  •   HanT    7 年前

    为每个结构字段编写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-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可能需要进行一些调整。