2009-10-30 5 views
2

Ладно, у меня есть что-то подобное в 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 

Как я должен написать мой добытчик или сеттер в этом случае?

ответ

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 – Marcin

+2

Не нужно, чтобы typedef удалял struct class-key, 'struct Name {}; Переменная имени: 'отлично работает. – 2009-10-30 21:04:59

+0

O RLY? Боюсь, я не парень из C++. C определенно требует 'typedef'. Думаю, это имеет смысл; C++ не требует, чтобы ключевое слово 'class' находилось рядом, когда вы объявляете экземпляры. –

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 вместо того, что манипулирует данными, вам следует, вероятно, отказаться от получателя/сеттера (как вы его неправильно используете) и сделать публикацию данных доступным.

Кроме того, помните: определение классов с struct работает одинаково для определения классов с class, но за одним исключением: общественный, а не частный, как доступ по умолчанию для членов и оснований.

+0

Теперь, когда кто-то любезно отредактировал код, я вижу, что я неправильно понял проблему. (D'oh.) Собираюсь оставить ответ в любом случае. – 2009-10-30 21:01:37

 Смежные вопросы

  • Нет связанных вопросов^_^