メンバに文字配列を入るとエラーに

[戻る]
ひですけ [E-Mail] 2002/04/27(土) 05:36:01
VC++5.0でコンソールのC++プログラムを以下のように作ってみたのですが
ビルドするとエラーができてしまいます。
要は、C++らしくクラスのメンバに文字配列を入れようと思っただけでした。

class hairetu
{
    char *a[5];
public:
    void hairetu();
    void txtout(int);
}

void hairetu::hairetu()
{
    *a[5] = {"I am a cat.",
        "hallo !!",
        "This is a pen.",
        "Who are you?.",
        "Here I am."
    };
}

hairetu::txtout(int n)
{
    if(n < 0||4 < n){
        cout << "入力が間違っています。";
        return;
    }else
    cout <<  a[n];
}

main()
{
    hairetu arg;
    int i;

    cout << "0〜4の数字を入力してください。" << endl;
    cin >> i;
    arg.txtout(i);
    return 0;
}

いろいろ書き換えてやってみたのですが、どれもだめでした。
文字列の配列をグローバル定数にした時や、メンバ関数内で定義したときは
何も問題なくビルドできたのですが。
参考書など、どれをみても文字配列をメンバにしたサンプルがなく
かと言ってメンバに文字配列が使えないといった話も聴いたことがない。
「こうすればよい」というやり方があるのでしたらどなたかお教えください。

ララバイ 2002/04/27(土) 08:31:52
こんにちは。わたしもそれほど詳しくないので、何か間違ってることがあったら済みません

*a[5] = {"I am a cat.",
        "hallo !!",      // hello ?
        "This is a pen.",
        "Who are you?.",
        "Here I am."
    };

のところですが、配列で{a,b,c,d,…}のように代入することが出来るのは
配列変数の宣言と同時に、配列に値を格納させるときだけです。つまり、

char *a[5] =  {"I am a cat.",
        "hallo !!",
        "This is a pen.",
        "Who are you?.",
        "Here I am."
    };

は、できますが

char *a[5];
*a[5] =  {"I am a cat.",
        "hallo !!",
        "This is a pen.",
        "Who are you?.",
        "Here I am."
    };
    
は、エラーです。


以下修正したコード

class hairetu
{
    char *a[5];
public:
    /*void*/ hairetu(); //コンストラクタに戻り値を指定することは出来ない
    void txtout(int);
};  // ;が抜けてます

/*void*/ hairetu::hairetu()
{
    /*                      // エラー
    *a[5] = {"I am a cat.",
        "hallo !!",
        "This is a pen.",
        "Who are you?.",
        "Here I am."
    };*/
    
    a[0] = "I am a cat.";
    a[1] = "hallo !!";
    a[2] = "This is a pen.";
    a[3] = "Who are you?";
    a[4] = "Here I am.";
}

void hairetu::txtout(int n)   // void が抜けてます
{
    if(n < 0||4 < n){
        cout << "入力が間違っています。";
        return;
    }else
    cout <<  a[n];
}

main()
{
    hairetu arg;
    int i;

    cout << "0〜4の数字を入力してください。" << endl;
    cin >> i;
    arg.txtout(i);
    return 0;
}

ララバイ 2002/04/27(土) 08:32:53
最初に、#include <iostream.h>はしてますよね?

ひですけ [E-Mail] 2002/04/27(土) 09:57:50
[[解決]]
失礼しました。<mOm>
原因は文字列の配列をメンバにしたからではありませんでした。
コンストラクタにvoidと型指定をしていたのは私の記入ミスで、
問題はこのミスでもありません。
クラスを宣言した部分の末尾に;が抜けていたためでした。
あまりにも"初歩"すぎるミスに貴重なスペースを割かせていただいたのは
大変に申し訳ないこととお詫びいたします。

ひですけ [E-Mail] 2002/04/27(土) 10:32:29
[[解決]]
ふたたび書き入れます。
配列に値を入れるやり方がまずいことを指摘してくださり
ララバイさんどうもありがとうございました。
まずいことは薄々気づいていたのですが、指摘により
はっきりと認識することができました。
もう二度と、こんな些細なミスで人を巻き込むことがないよう気をつけます。
繰り返し申し上げます。
ララバイさん、ご指摘ありがとうございました。

古いスレッドには追加発言できません。