C++ - 派生类 - 错误:在"int"之前预期的主表达式

C++ - Deriving Classes - Error: expected primary expression before'int'

本文关键字:表达式 int 错误 C++ 派生      更新时间:2023-10-16

第一篇文章,请对我温柔点…

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

我的头文件:

#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文件,我得到不同的错误-显然。

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

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

谢谢

您使用的成员初始化列表不正确。如果您希望将传递给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),对吧?

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

删除该行所有的"int"

这一行:

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

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

违规行是这一行:

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

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

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

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