C++编程日期类



第一次学习c++。在创建日期类时,我们使用整数来表示月、日和年。我们需要一个成员函数来将日期增加到第二天,而自由函数则以数字和单词格式显示日期。我的头文件编译了,但当我在emacs中编译Date.cpp文件时,我得到了以下错误:

Date.cpp: In member function âDate Date::operator++()â:
Date.cpp:38: warning: suggest parentheses around â&&â within â||â
Date.cpp:46: error: â(((Date*)this)->Date::yyear ++)â cannot be used as a function
Date.cpp:50: error: conversion from âintâ to non-scalar type âDateâ requested
Date.cpp:51: error: conversion from âintâ to non-scalar type âDateâ requested
Date.cpp:52: error: conversion from âintâ to non-scalar type âDateâ requested
Date.cpp: At global scope:
Date.cpp:58: error: ISO C++ forbids declaration of âdisplay1â with no type
Date.cpp:58: error: no âint Date::display1()â member function declared in class âDateâ
Date.cpp:65: error: ISO C++ forbids declaration of âdisplay2â with no type
Date.cpp:65: error: no âint Date::display2()â member function declared in class âDateâ

我的Date.cpp的代码显示在这里:

#include "Date.h"
#include <iostream>
#include <cassert>
Date::Date(int month, int day, int year)
{
mmonth = month;
dday = day;
yyear = year;
}
int Date::get_mmonth()const
{ 
return mmonth;
}
//postcondition: month has been returned
int Date::get_dday()const
{
return dday;
}
//postcondition: day has been returned
int Date::get_yyear()const
{
return yyear;
}
//year has been returned
//precondition: day will be incremented 
Date operator ++()
{
dday++;
assert(dday >= 1 && dday <= 31);
mmonth++;
assert(mmonth >= 1 && mmonth <= 12);
yyear++;
if(mmonth == 2 && dday == 28 || dday == 29)
{
if(yyear % 4 || yyear % 400)
{
std::cout<<"Thats a Leap Year"<<std::endl;
mmonth++;
dday++;
yyear++
assert(dday >= 1 && dday <= 31);
assert(mmonth >= 1 && mmonth <= 12);
}
}
return mmonth;
return dday;
return yyear;
}
//post condition: date has been incremented
//precondition: Date will  be displayed in number format
Date::display1()
{
std::cout<<mmonth<<'/'<<dday<<'/'<<yyear<<std::endl;
}
//postcondition: Date is displayed in number format
//precondition: Date will be displayed in word format
Date::display2()
{
switch(mmonth)
{
case 1:
std::cout<<"Januar"<<std::endl;
break;
case 2:
std::cout<<"February"std::endl;
break;
case 3:
std::cout<<"March"<<std::endl;
break;
case 4:
std::cout<<"April"<<std::endl;
break;
case 5:
std::cout<<"May"<<std::endl;
break;
case 6:
std::cout<<"June"<<std::endl;
break;
case 7:
std::cout<<"July"<<std::endl;
break;
case 8:
std::cout<<"August"<<std::endl;
break;
case 9:
std::cout<<"September"<<std::endl;
break;
case 10:
std::cout<<"October"<<std::endl;
break;
case 11:
std::cout<<"November"<<std::endl;
break;
case 12:
std::cout<<"December"<<std::endl;
break;
default;
}
std::cout<<mmonth<<'/'<<dday<<'/'<<yyear<<std::endl;
//post condition: Date will be displayed in word format
}

为什么我会出现这些错误??

您的代码中有两个问题:

  1. Date operator ++()中,您试图返回int3次:

    return mmonth;
    return dday;
    return yyear;
    

    而您声明该函数返回Date,编译器不知道如何将int转换为Date。即使最后两个返回语句是不可访问的(因为代码在到达第一个返回语句时返回),编译器也会对这三个语句都发出错误。

    也许你想要这样的东西(代替那3条退货声明):

    return Date (mmonth, dday, yyear)
    

    与此相关的是,看到您所有的函数都是Date类的一部分,我怀疑operator++也一样(但我不能确定,因为没有看到头文件,但In member function âDate Date::operator++()â:的编译器输出提供了一个很好的线索),所以您可能想重写

    Date operator ++()
    

    Date Date::operator ++()
    
  2. C++中的所有函数都必须有返回值。如果函数没有返回任何内容,那么它必须返回void

    因此的功能

    Date::display1()
    /*...*/
    Date::display2()
    /*...*/
    

    必须重写为

    void Date::display1()
    /*...*/
    void Date::display2()
    /*...*/
    

你可能也会从阅读一本好的C++书中受益,因为你在语法上犯的错误是如此微不足道,以至于一本像样的书会涵盖一条路(通过猜测编程不是一种好的学习方式)。

最新更新