2013-05-09 19 views
0

第一篇文章,所以要溫柔地對待我......C++ - 派生類 - 錯誤:預期主要表現before'int」

我想實現一個派生類時遇到的問題,不管我怎麼努力上午出現編譯錯誤。我相信這是我錯過的一些簡單的東西,但對我來說這是非常新的東西,而且我的所有研究都沒有給我任何幫助(或者我錯過了,因爲我不知道我在做什麼!)。

這是我的頭文件:

#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文件中的東西,我會得到不同的錯誤 - 顯然。

基本上我真的不知道如何做到這一點,並一直在努力試圖找到正確的方式...

無論如何,如果有人能指出我在正確的方向,將不勝感激...

由於

+0

這是一個提示:'y'是一個主要表達式。 – chris 2013-05-09 23:03:58

+0

是一個錯字,或者你真的有一個','之後:DateTime ... int s)? – 2013-05-09 23:05:35

回答

6

您使用成員初始化列表不正確。如果你想傳遞的傳遞給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)來調用它,對嗎?

+0

謝謝大家......現在很有道理,我覺得這很簡單,我錯過了。尾隨的逗號是一個錯字,很抱歉與此混淆。 – pelagos 2013-05-09 23:21:35

0

:日期時間(INT Y,INT米,INT d,INT小時,INT分鐘,int類型),{

從該行刪除所有 「INT」 秒。

+1

和「,」之前「{」 – ForEveR 2013-05-09 23:05:28

0

這一行:

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

應該是:

: DateTime(y, m, d,h, min,s) { 
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) 
0

的那一行是這樣的一個:

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

首先你,前有一個結尾逗號,那麼你就應該刪除int你把這個行:你是不是定義的超類的構造函數,但它調用它。將此視爲普通(未綁定)函數:您可以使用f(x)而不是f(int x)來調用函數。