2012-11-21 27 views
3
#include<iostream> 
#include<cstring> 
using namespace std; 
class Employee 
{ 
    char name[5]; 
    int id; 
    int age; 
    public: 
    Employee(char* a, int b, int c) 
    { 
     strcpy(name, a); 
     id=b; 
     age=c; 
    } 
}; 
class Officer: public Employee 
{ 
    char officer_cadre[3]; 
    public: 
    Officer(char* a, int b, int c, char* d):Employee(char* a, int b, int c) 
    { 
     strcpy(officer_cadre, d); 
    } 
}; 
int main() 
{ 
    Officer o1("Nakul", 1, 2, "ABC"); 
    return 0; 
} 

上面的代碼很簡單,但我無法弄清楚爲什麼編譯器「字符之前預期的主要表達」扔一樣錯誤和之前的主要表現'int之前的預期主表達式'。C++錯誤 - 預期「焦」和「廉政」

+1

這行是錯誤的? –

+2

不相關,但你的字符數組太短。您需要一個元素用於空終止。但更好使用'std :: string'。 – juanchopanza

回答

4

在此行中

Officer(char* a, int b, int c, char* d):Employee(char* a, int b, int c) 

你應該只傳遞一個,b和c。相反,您正在使用語法來聲明a,b和c。只要提到它們,你就不需要這些類型。 IE你應該這樣做:

Officer(char* a, int b, int c, char* d):Employee(a, b, c) 

你可能只是不小心將聲明覆制粘貼到子類的構造函數。

+0

他應該爲'a'和'd'分配內存嗎? – Maroun

+0

爲什麼,它指向的內存,必須分配 –

+0

@Doug T謝謝! – Naxical

4

改變這一行:

Officer(char* a, int b, int c, char* d):Employee(char* a, int b, int c) 

要這樣:

Officer(char* a, int b, int c, char* d):Employee(a,b,c) 

而且我關心你的officer_cadre的聲明。它是一個字符指針數組,但沒有內存分配。那是你的意思嗎?

+0

現在工作正常!錯誤地使它成爲一個char指針數組,應該是一個字符數組! – Naxical

+0

謝謝!真的幫了! – Naxical

0

變化

char* officer_cadre[3]; 

char officer_cadre[3]; 
相關問題