Я создаю класс «date» в C++, который содержит переменные дня, месяца и года и кучу функций оператора, чтобы использовать его.C++ Необъявленный идентификатор внутри операторской функции
У меня есть заголовок 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());
Любая помощь очень ценится. Если вам нужно увидеть больше кода, дайте мне знать.
Это похоже на работу, большое спасибо. В чем разница между ответом и ответом dbrank0? Потому что оба, похоже, работают. Просто любопытно, потому что я только начал изучать C++. – Baburo
@Baburo: разница в том, что код dbrank0 полностью квалифицирует имя функции. Если 'getDay' является виртуальной функцией, а' operator + 'вызывается в производном классе' date', то 'date :: getDay()' будет вызывать версию функции в 'date', тогда как' getDay() 'будет вызывать любое переопределение в производном классе. В противном случае это не имеет значения, это просто другой способ указать ту же функцию. –
Кстати, вы также могли бы написать 'date dTemp (* this);', который будет использовать конструктор копирования для создания 'dTemp' –