0

第一次发帖,对我温柔点。。。

我正在尝试实现派生类并且遇到问题,无论我尝试什么都会遇到编译错误。我确信这是我错过的一些简单的事情,但我对此很陌生,我所有的研究都没有给我任何帮助(或者我只是错过了它,因为我不知道我在做什么!)。

这是我的头文件:

#ifndef WEEKDAY_H 
#define WEEKDAY_H 

#include <iostream>
#include <string>
#include <ctime>

using namespace std;

    class DateTime{
        public:
            DateTime(int y, int m, int d, int h = 0, int min = 0, int s = 0);
            void display();
        protected:
            string get_string_component(char option, tm* dateStruct);
            int get_year_days(tm* dateStruct);
            struct tm DTstruct;
        private:
            bool validate_data( int y, int m, int d, int h, int min, int s);
    };

    class WeekDay : public DateTime{
        public:
            WeekDay(int y, int m, int d, int h = 0, int min = 0, int s = 0);
        void display();
    };

    #endif

这是我试图实现的 .cpp 文件的摘录:

WeekDay::WeekDay(int y, int m, int d, int h, int min, int s)
    : DateTime(int y, int m, int d, int h, int min, int s),{
}

void WeekDay::display(){
}

目前我收到以下错误:

weekday.cpp: In constructor 'WeekDay::WeekDay(int, int, int, int, int, int)':
weekday.cpp:58:13: error: expected primary-expression before 'int'
weekday.cpp:58:20: error: expected primary-expression before 'int'
weekday.cpp:58:27: error: expected primary-expression before 'int'
weekday.cpp:58:34: error: expected primary-expression before 'int'
weekday.cpp:58:41: error: expected primary-expression before 'int'
weekday.cpp:58:50: error: expected primary-expression before 'int'
weekday.cpp:60:1: error: expected identifier before '{' token

如果我在 .cpp 文件中进行更改,我会得到不同的错误 - 显然。

基本上我真的不知道该怎么做,并且一直在努力寻找正确的方法......

无论如何,如果有人能指出我正确的方向,将不胜感激......

谢谢

4

5 回答 5

9

您错误地使用了成员初始化列表。如果要将传递给构造函数的参数的值传递给 的WeekDay构造函数DateTime,则需要删除类型:

WeekDay::WeekDay(int y, int m, int d, int h, int min, int s)
  : DateTime(y, m, d, h, min, s) {
}

将其视为调用函数(因为实际上,这就是它正在做的事情)。如果你有一个类似的函数void foo(int x);,你不会通过写来调用它foo(int 5),是吗?

于 2013-05-09T23:06:05.233 回答
0

:日期时间(int y,int m,int d,int h,int min,int s),{

从该行中删除所有“int”。

于 2013-05-09T23:05:05.247 回答
0

这一行:

: DateTime(int y, int m, int d, int h, int min, int s),{

应该:

: DateTime(y, m, d,h, min,s) {
于 2013-05-09T23:05:35.810 回答
0

成员初始化器列表采用逗号分隔的数据成员列表,并使用您提供的参数对其进行初始化。int x不是一个值,在这种情况下它实际上是一个语法错误。但是,x将是一个值。

WeekDay::WeekDay(int y, int m, int d, int h, int min, int s)
    : DateTime(y, m, d, h, min, s)
于 2013-05-09T23:07:08.777 回答
0

违规行是这一行:

    : DateTime(int y, int m, int d, int h, int min, int s),{

首先,您在 之前有一个尾随逗号,,然后您应该删除int您在这一行中放入的 :您不是定义超类构造函数,而是调用它。把它想象成一个普通的(未绑定的)函数:你用f(x),而不是调用函数f(int x)

于 2013-05-09T23:07:19.803 回答