我在StackExchange上的第一篇文章! 我有一个C ++课程的作业;创建使用以前分配日期类(月,日,年)和时间类(小时,分钟,上午/下午)的约会类。 我想我的大部分主要/语法错误都没有。
我的问题是,我目前已经完成了#includes和头文件,我得到了日期和时间的构造函数的多个定义错误 。(我对模板知之甚少,但我需要与他们合作。)
我的档案:
Appointment.cpp
#include "time.cpp"
#include "date.cpp"
#include "appointment.h"
我需要能够创建时间/日期对象,我应该使用.h还是.cpp文件?
Appointment.h
#ifndef _APPOINTMENT_H_
#define _APPOINTMENT_H_
#include <iostream>
#include "time.h"
#include "date.h"
date.cpp
#ifndef _DATE_CPP_
#define _DATE_CPP_
#include "date.h"
date.h
#ifndef _DATE_H_
#define _DATE_H_
time.cpp
#ifndef _TIME_CPP_
#define _TIME_CPP_
#include "time.h"
time.h中
#ifndef _TIME_H_
#define _TIME_H_
以下内容与上述文件的实施有关:
的main.cpp
#include "arrayListType.h"
#include "appointment.h"
void read(arrayListType<Appointment>&);
void output(const arrayListType<Appointment>&);
int main()
{
arrayListType<Appointment> appointments;
read(appointments);
output(appointments);
return 0;
}
read.cpp
#include "arrayListType.h"
#include "appointment.h"
#include <fstream>
using namespace std;
void read(arrayListType<Appointment>& appointments)
{...}
output.cpp
#include "arrayListType.h"
#include "appointment.h"
#include <iostream>
#include <iomanip>
using namespace std;
void output(const arrayListType<Appointment>& appointments)
{...}
arrayListType.h(其中包含所有实现,作为模板)
不确定是否需要查看最后的2.如果我需要发布更多信息,我很高兴。我也有所有文件的压缩版本。
答案 0 :(得分:1)
从Appointment.cpp中删除这些行:
#include "time.cpp"
#include "date.cpp"
您几乎不应该包含另一个.cpp
文件。因此,您还可以删除.cpp
文件中包含的保护,因为您不会将其包括在内。
main.cpp
中的这些行需要位于main.cpp
和实现该函数的.cpp
文件中的头文件中:
void read(arrayListType<Appointment>&);
void output(const arrayListType<Appointment>&);
您似乎忽略了头文件的重点。我们的想法是分离接口和实现。头文件提供了不同单元需要知道的所有内容,以便能够调用头中列出的函数。调用函数后,.cpp
文件实际上可以正常工作;只要它符合头文件指定的“合同”,其他单位就不需要知道它是如何工作的。
我还建议进行一些更改,以避免可能发生的冲突:
"time.h"
更改为其他内容;有一个名为<time.h>
的标准标题,很容易让您的编译器或系统环境设置有点错误,最终包含错误的标题H_APPOINTMENT
作为标头保护令牌。保留以_
开头,后跟大写字母的标识符;以及以E
开头的全部大写标识符。