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;
}

上記のコードは単純ですが、コンパイラが「char の前に一次式が必要です」や「int の前に一次式が必要です」などのエラーをスローする理由を理解できません。

4

3 に答える 3

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 の宣言についても懸念しています。これは文字ポインタの配列ですが、メモリ割り当てはありません。それはあなたが意図した宣言でしたか?

于 2012-11-21T13:27:32.970 に答える
4

この行で

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

a、b、および c を渡すだけです。代わりに、構文を使用して a、b、および c を宣言しています。それらを参照するだけの場合、タイプは必要ありません。IEあなたがすべきこと:

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

誤って宣言をコピーして子クラスのコンストラクターに貼り付けた可能性があります。

于 2012-11-21T13:28:30.067 に答える
0

変化する

char* officer_cadre[3];

char officer_cadre[3];
于 2012-11-21T13:33:47.820 に答える