Проблема XCode с классом даты

Я продолжаю получать ту же ошибку в программе, которая должна быть просто классом дат. Это предупреждения

start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation).

Это код.

// Lab 2: Date.cpp
// Member-function definitions for class Date.
#include <iostream> 
using std::cout; 

#include "Date.h" // include definition of class Date


Date::Date( int m, int d, int y ) 
{
    setDate( m, d, y ); // sets date 
} // end Date constructor

void Date::setDate( int mo, int dy, int yr )
{
    setMonth( mo ); // invokes function setMonth 
    setDay( dy ); // invokes function setDay
    setYear( yr ); // invokes function setYear
} // end function setDate

void Date::setDay( int d )
{
    if ( month == 2 && leapYear() )  
        day = ( d <= 29 && d >= 1 ) ? d : 1; 
    else
        day = ( d <= monthDays() && d >= 1 ) ? d : 1;
} // end function setDay

void Date::setMonth( int m ) 
{ 
    month = m <= 12 && m >= 1 ? m : 1; // sets month  
} // end function setMonth

void Date::setYear( int y ) 
{
    year = y >= 1900 ? y : 1900; // sets year
} // end function setYear

int Date::getDay() 
{
    return day;
} // end function getDay

int Date::getMonth() 
{ 
    return month; 
} // end function getMonth

int Date::getYear() 
{ 
    return year; 
} // end function getYear

void Date::print()
{
    cout << month << '-' << day << '-' << year << '\n'; // outputs date
} // end function print

void Date::nextDay(int d)
{
    d=d+1;
}
bool Date::leapYear()
{
    if ( getYear() % 400 == 0 || ( getYear() % 4 == 0 && getYear() % 100 != 0 ) )
        return true; // is a leap year
    else
        return false; // is not a leap year
} // end function leapYear

int Date::monthDays()
{
    const int days[ 12 ] =  
    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

   return getMonth() == 2 && leapYear() ? 29 : days[ getMonth() - 1 ];
} // end function monthDays

и вот файл.h

// Lab 2: Date.h
#ifndef DATE_H
#define DATE_H

class Date 
{
public:
   Date( int = 1, int = 1, int = 2000 ); // default constructor
   void print(); // print function
   void setDate( int, int, int ); // set month, day, year
   void setMonth( int ); // set month
   void setDay( int ); // set day
   void setYear( int ); // set year
   int getMonth(); // get month
   int getDay(); // get day
   int getYear(); // get year 
    void nextDay(int);
private:
   int month; // 1-12
   int day; // 1-31 (except February(leap year), April, June, Sept, Nov)
   int year; // 1900+
   bool leapYear(); // leap year
   int monthDays(); // days in month 
}; // end class Date

#endif

1 ответ

Просто из любопытства вы не пытаетесь скомпилировать программу без main функция, а ты? Если это так, вы получите ошибку компиляции.

Кроме того, вы должны знать, что ваш nextDay функция, вероятно, не делает то, что вы думаете, что она делает.

void Date::nextDay(int d)
{
    d=d+1;
}

Так как вы проходите d по значению, это просто увеличивает копию d и затем выходит. Если вы намеревались изменить исходное значение, вы должны изменить сигнатуру функции на void Date::nextDay(int& d),

Другие вопросы по тегам