C++编程日期类
C++ Programming Date Class
第一次学习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
}
为什么我会出现这些错误??
您的代码中有两个问题:
-
在
Date operator ++()
中,您试图返回int
3次: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 ++()
-
C++中的所有函数都必须有返回值。如果函数没有返回任何内容,那么它必须返回
void
。因此的功能
Date::display1() /*...*/ Date::display2() /*...*/
必须重写为
void Date::display1() /*...*/ void Date::display2() /*...*/
你可能也会从阅读一本好的C++书中受益,因为你在语法上犯的错误是如此微不足道,以至于一本像样的书会涵盖一条路(通过猜测编程不是一种好的学习方式)。
相关文章:
- 查询SQLite数据库中的日期
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- Log4cpp:以UTC/GMT时区打印日期
- 模板元编程:如何将参数包组合成新的参数包
- 使用C++的日期库读取时间
- Qt Q串行端口未编程设备未关闭
- 日期格式为C++
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- 如何在 C++20 计时中为日期添加天数?
- 如何在QTableView中排序和更改日期格式
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- C++编程日期类
- 如何使用套接字编程获取系统日期和时间