Visual C++ 6.0
C++
C2228 must have class/struct/union typeと言うエラーが私のプログラム中にでてくるんですが、何が悪いんでしょか?一応全てちゃんと定義したはずなんですが。
何のエラーか見て分からないので詳しく説明お願いします。
"C2228" を反転表示(選択)して F1 キーを押しても
分かりませんか?
HELP には エラーコードを検索する機能があります。
(環境はVC++ですよね。)
ありがとうございます。今ちょっと試して見ます。
すいません^−^;
私のパソコンのCD-RW壊れててVisual studio C++をちゃんとインストールできていません。
でもコンパイルと実行はできるので今まで使ってきました^−^;;
つまりHELPを使えないという事です^−^;;
エラーテキストをダブルクリックすると、
エラーに該当する行へ飛びますよね。
見て分かる程度のミスタイプだと思いますが。
aaa.bbb や aaa->bbb の形式で、
aaa がクラスや、構造体、共用体ではないといっているので、
aaa のタイプミスでは?
ここにコードだしますね,,,ちょっと長いですけど^−^;
#include <iostream>
#include <string>
#include <stdlib.h>
const int buffer = 255;
using namespace std;
class Neko{// Neko Class Start
string name;
public:
Neko( string s ) : name(s){}
void voice();
};
void Neko::voice(){
cout << "\t HaHaHa......!!!" << endl;
cout << "\t I am " << name << endl;
}// Neko Class Finished
//継承するねこ
class GainCat : public Neko{
int income;
public:
GainCat( string s, int x ) : Neko(s), income(x){}
int choice();
int YearlyIncome() const {return income*12;}
void IncreaseIncome(){income++;}
};
int GainCat::choice(){
int select;
cout << "\t Please select one number to invoke your cat." << endl;
cout << "\t 1 ) To mew." << endl;
cout << "\t 2 ) To display your yearly income." << endl;
cout << "\t 3 ) To increase your income." << endl;
cout << "\t 4 ) To finish this program." << endl << "\n\t";
cin >> select;
system("cls");
return select;
}
int main(){
string cat;
int money,num;
cout << "\t Please enter your faivorite cat name." << endl;
cin >> cat;
cout << "\t Please enter your starting income." << endl;
cout << "\t Please enter your income more than $100." << endl;
cin >> money;
system("cls");
GainCat one( string cat , int money );
while ( true ){
num = one.choice();
switch ( num ){
case 1:
one.voice();
break;
case 2:
cout << "\t Your current yearly income is " << one.YearlyIncome() << " ." << endl;
break;
case 3:
cout << "\t Your income has been increased by " << one.IncreaseIncome() << " ." << endl;
break;
case 4:
cout << "\t Thank you so much." << endl;
cout << "\t See you again." << endl;
break;
default:
cin.clear();
cin.ignore(buffer, '\n');
cout << "You have selected wrong number." << endl;
cout << "Please press enter to reselect." << endl;
cin.sync();
cin.get();
system("cls");
break;
}
cout << endl;
if ( num == 4 ){
break;
}
}
return 0;
}
一応one.〜って所全てにエラーが発生します^−^;;:
> C2228 must have class/struct/union type
エラーの発生箇所(行番号)は分かるはずですから、その前後をよく調べて下さい。
また、怪しいところのコードを示せば、何か分かる可能性はあります。
投稿が前後してしまいました。
> one.〜って所全てにエラーが発生
"one"がどこにも定義されていないからです。
> GainCat one( string cat , int money );
は、GainCatクラスのインスタンスoneの生成でなく、戻り値の型がGainCatクラスで、string型、int型の引数をとる関数のプロトタイプ宣言と解釈されます。
GainCat one( cat, money );
でなくてはいけません。
なるほど。
大変本当にありがとうございます^−^
大変勉強になりました。
ではオブジェクト生成をする時は、intとか stringを中に書いてはだめだという事ですよね?
> ではオブジェクト生成をする時は、intとか stringを中に書いてはだめだという事ですよね?
そうです。
GainCat one( cat, money );
この構文は、GainCatクラスのコンストラクタを呼び出します。
普通の関数呼び出しのときに引数を渡す場合と同じと考えて良いです。
繰り返しますが
GainCat one( string cat, int money );
これは、string型とint型の引数をとり、GainCat型の値を戻すoneという名前の関数プロトタイプ宣言です。
大変ありがとうございました。
まだ色々と理解できてないところが多いもので^−^;
ツイート | ![]() |