メンバに文字配列を入るとエラーに – プログラミング – Home

メンバに文字配列を入るとエラーに
 
通知
すべてクリア

[解決済] メンバに文字配列を入るとエラーに


ひですけ
 ひですけ
(@ひですけ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

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

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


引用未解決
トピックタグ
ララバイ
 ララバイ
(@ララバイ)
ゲスト
結合: 23年前
投稿: 13
 

こんにちは。わたしもそれほど詳しくないので、何か間違ってることがあったら済みません

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


返信引用
ララバイ
 ララバイ
(@ララバイ)
ゲスト
結合: 23年前
投稿: 13
 

最初に、#include <iostream.h>はしてますよね?


返信引用
ひですけ
 ひですけ
(@ひですけ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

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


返信引用
ひですけ
 ひですけ
(@ひですけ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ふたたび書き入れます。
配列に値を入れるやり方がまずいことを指摘してくださり
ララバイさんどうもありがとうございました。
まずいことは薄々気づいていたのですが、指摘により
はっきりと認識することができました。
もう二度と、こんな些細なミスで人を巻き込むことがないよう気をつけます。
繰り返し申し上げます。
ララバイさん、ご指摘ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました