Erro

解決


初心者  2004-12-19 19:07:12  No: 55753

Visual C++  6.0

C++

C2228  must have class/struct/union typeと言うエラーが私のプログラム中にでてくるんですが、何が悪いんでしょか?一応全てちゃんと定義したはずなんですが。

何のエラーか見て分からないので詳しく説明お願いします。


なーめ  2004-12-19 19:18:36  No: 55754

"C2228" を反転表示(選択)して F1 キーを押しても
分かりませんか?
HELP には エラーコードを検索する機能があります。
(環境はVC++ですよね。)


初心者  2004-12-19 19:21:37  No: 55755

ありがとうございます。今ちょっと試して見ます。


初心者  2004-12-19 20:01:02  No: 55756

すいません^−^;
私のパソコンのCD-RW壊れててVisual studio C++をちゃんとインストールできていません。
でもコンパイルと実行はできるので今まで使ってきました^−^;;


初心者  2004-12-19 20:05:08  No: 55757

つまりHELPを使えないという事です^−^;;


なーめ  2004-12-19 20:21:49  No: 55758

エラーテキストをダブルクリックすると、
エラーに該当する行へ飛びますよね。
見て分かる程度のミスタイプだと思いますが。

aaa.bbb や aaa->bbb の形式で、
aaa がクラスや、構造体、共用体ではないといっているので、
aaa のタイプミスでは?


初心者  2004-12-19 20:23:24  No: 55759

ここにコードだしますね,,,ちょっと長いですけど^−^;

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


初心者  2004-12-19 20:26:32  No: 55760

一応one.〜って所全てにエラーが発生します^−^;;:


monkey  2004-12-19 20:26:38  No: 55761

> C2228  must have class/struct/union type

エラーの発生箇所(行番号)は分かるはずですから、その前後をよく調べて下さい。
また、怪しいところのコードを示せば、何か分かる可能性はあります。


monkey  2004-12-19 20:35:30  No: 55762

投稿が前後してしまいました。

> one.〜って所全てにエラーが発生

"one"がどこにも定義されていないからです。

>   GainCat one( string cat , int money );

は、GainCatクラスのインスタンスoneの生成でなく、戻り値の型がGainCatクラスで、string型、int型の引数をとる関数のプロトタイプ宣言と解釈されます。

    GainCat one( cat, money );

でなくてはいけません。


初心者  2004-12-19 20:39:02  No: 55763

なるほど。
大変本当にありがとうございます^−^
大変勉強になりました。


初心者  2004-12-19 20:44:25  No: 55764

ではオブジェクト生成をする時は、intとか stringを中に書いてはだめだという事ですよね?


monkey  2004-12-19 21:06:36  No: 55765

> ではオブジェクト生成をする時は、intとか stringを中に書いてはだめだという事ですよね?

そうです。

    GainCat one( cat, money );

この構文は、GainCatクラスのコンストラクタを呼び出します。
普通の関数呼び出しのときに引数を渡す場合と同じと考えて良いです。

繰り返しますが

    GainCat one( string cat, int money );

これは、string型とint型の引数をとり、GainCat型の値を戻すoneという名前の関数プロトタイプ宣言です。


初心者  2004-12-19 21:38:27  No: 55766

大変ありがとうございました。
まだ色々と理解できてないところが多いもので^−^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加