Доступ к закрытым членам локальных объектов (того же типа класса)

Мне нужно получить доступ к закрытым членам локального объекта из функции-члена. Пример объясняет это лучше, я думаю. Есть ли способ сделать это, не делая *a общедоступным или не предоставляя функцию специально для назначения *a ? Эта функция operator+ может несколько раз выделять и/или освобождать *a для локального объекта.

Это post, кажется, предполагает, что это должно работать.

// object.h
class object {
    char *a;
    ...
}
// object.cpp
object object::operator+(object const &rhs) const {
    int amount = ...
    object local();

    // this is ok
    this->a = new char[amount];
    // this is ok too
    rhs.a = new char[amount];
    // this is not
    local.a = new char[amount];
    ....
}

Моя ошибка компиляции (g++ 4.6.3):

error: request for member ‘a’ in ‘local’, which is of non-class type ‘object()’

person xst    schedule 02.05.2012    source источник
comment
Похоже, вы пытаетесь вызвать конструктор объекта, верно? Вам не нужен '()' при вызове конструктора по умолчанию, только когда вы передаете аргументы конструктору.   -  person Brady    schedule 02.05.2012


Ответы (1)


object local();

на самом деле является объявлением функции, а не определением объекта. Создайте свою переменную, используя:

object local;

Поскольку operator + является членом класса, у вас есть права доступа к private членам, поэтому проблема возникает из-за наиболее сложного синтаксического анализа.

person Luchian Grigore    schedule 02.05.2012