С++ Необъявленный идентификатор внутри операторной функции

Я создаю класс «дата» на С++, который содержит переменные дня, месяца и года и набор функций оператора для его использования.

У меня есть заголовок date.h и date.cpp для моего класса, и одна из функций оператора в date.cpp дает мне кучу ошибок.

date.cpp (я хочу, чтобы эта операторная функция подсчитывала добавленные дни и возвращала новый объект даты и избегала изменений в исходном объекте даты.)

date date::operator+(long days) const{

    date dTemp( date.getDay(), date.getMonth(), date.getYear() );

    for(int i=0;i<days;i++){

        //If days go over a months day count.
        if(dTemp.getDay() >= daysInMonth[dTemp.getMonth()]){
            dTemp.setDay(1);
            if(dTemp.getMonth() < 12){
                dTemp.setMonth(dTemp.getMonth() + 1);
            }
            else{
                //Changing a year.
                dTemp.setMonth(1);
                dTemp.setYear(dTemp.getYear() + 1);
            }

        }
        else{
            dTemp.setDay(dTemp.getDay() + 1);
        }
    }
    return dTemp;
}

Ошибки:

1>h:\c++\teht21\teht20\date.cpp(74): error C2143: syntax error : missing ')' before '.'
1>h:\c++\teht21\teht20\date.cpp(74): error C3484: syntax error: expected '->' before the return type
1>h:\c++\teht21\teht20\date.cpp(74): error C2061: syntax error : identifier 'getDay'
1>h:\c++\teht21\teht20\date.cpp(79): error C2065: 'dTemp' : undeclared identifier
1>h:\c++\teht21\teht20\date.cpp(79): error C2228: left of '.getDay' must have class/struct/union
1>          type is ''unknown-type''

Строка 74:

date dTemp( date.getDay(), date.getMonth(), date.getYear() );

Любая помощь очень ценится. Если вам нужно увидеть больше кода, дайте мне знать.


person Baburo    schedule 26.01.2012    source источник


Ответы (2)


Если getDay(), getMonth(), getYear() являются функциями-членами, и вы хотите вызвать их в this, измените:

date dTemp( date.getDay(), date.getMonth(), date.getYear() );

to:

date dTemp( getDay(), getMonth(), getYear() );
person hmjd    schedule 26.01.2012
comment
Кажется, это работает, большое спасибо. В чем разница между вашим ответом и ответом dbrank0? Потому что оба вроде работают. Просто любопытно, потому что я только начал изучать С++. - person Baburo; 26.01.2012
comment
@Baburo: разница в том, что код dbrank0 полностью определяет имя функции. Если getDay является виртуальной функцией, а operator+ вызывается в производном классе от date, то date::getDay() вызывает версию функции в date, а getDay() вызывает любое переопределение в производном классе. В противном случае это не имеет значения, это просто другой способ определения одной и той же функции. - person Steve Jessop; 26.01.2012
comment
Кстати, вы могли бы также написать date dTemp(*this);, который будет использовать конструктор копирования для создания dTemp - person Steve Jessop; 26.01.2012

Вероятно, вы хотите вызвать здесь статические методы:

date dTemp( date.getDay(), date.getMonth(), date.getYear() );

So:

date dTemp( date::getDay(), date::getMonth(), date::getYear() );
person dbrank0    schedule 26.01.2012