• 締切済み

C++ で、「)」が必要 というエラー

今年の9月にC++を学校ではじめた初心者です。 書いているプログラムで、コンパイルしようとしたときに、)が必要 と出てくるのですが、対応している()はあるので、どうすればいいか困っています。 使っているコンパイラはBorland C++ です。 よろしくおねがいします。 class DraculaCastle {      VanHelsing vh;      CountDraculia cd; ここ→ CountDraculia cdstrong(400, rand()%10, 30, 0); public:      DraculaCastle();      void Play(); };

みんなの回答

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.6

#4の回答補足について >「:cdstrong(400, rand()%10, 30, 0) // <= ココに追加」 >の部分なんですが、この書き方で二つかけますか? 初期化子は、2つ以上、かけます 複数のメンバー変数を書く場合は、「,」(カンマ)で区切ってください 書き方は以下のようになります class DraculaCastle {     VanHelsing vh;     CountDraculia cd;     CountDraculia cdstrong; public:     DraculaCastle();     void Play(); }; DraculaCastle::DraculaCastle() :cd(100+rand()%10*10, rand()%10, rand()%5*5, 0, 20+rand()%2*10), cdstrong(300, rand()%10, 30, 0, 30+rand()%3*10) { ~以下略~ #5の回答補足について > 上のコードを使ったらできました。ですが、なぜはじめの )が必要 というエラーがでたのでしょうか? コンパイラがどのように構文解析をしていったかによりますので、なんともいえません 少なくとも、構文とあっていなかったと、いうことです。 たとえば、同じようなコードをVC++6でコンパイルすると、違うメッセージが表示されています。 あまり深く追求しなくてもよいかと思います コンパイラの構成を勉強したいのであれば、別ですが...

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.5

#4に追記ですが、クラス宣言が抜けていたので一応追加です class DraculaCastle {      VanHelsing vh;      CountDraculia cd;      CountDraculia cdstrong; public:      DraculaCastle();      void Play(); }; DraculaCastle::DraculaCastle() :cdstrong(400, rand()%10, 30, 0) // <= ココに追加 {     cout << "<you enter the dark castle of Count Draculia>" << endl;     cout << "<everything around you is dusty>" << endl;     cout << "<then, you sense a presence over you... looking down upon you>" << endl; ~中略~     cout << "<your remaining MP>:" << vh.GetMP() << endl;     cout << "<Count Draculia's remaining HP>:" << cd.GetHP() << endl; }

Romans
質問者

補足

解決策、ありがとうございました。 上のコードを使ったらできました。ですが、なぜはじめの )が必要 というエラーがでたのでしょうか?

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.4

このようにしては、どうですか? DraculaCastle::DraculaCastle() :cdstrong(400, rand()%10, 30, 0) // <= ココに追加 {     cout << "<you enter the dark castle of Count Draculia>" << endl;     cout << "<everything around you is dusty>" << endl;     cout << "<then, you sense a presence over you... looking down upon you>" << endl; ~中略~     cout << "<your remaining MP>:" << vh.GetMP() << endl;     cout << "<Count Draculia's remaining HP>:" << cd.GetHP() << endl; }

Romans
質問者

補足

「:cdstrong(400, rand()%10, 30, 0) // <= ココに追加」 の部分なんですが、この書き方で二つかけますか? class DraculaCastle {     VanHelsing vh;     CountDraculia cd;     CountDraculia cdstrong; public:     DraculaCastle();     void Play(); }; DraculaCastle::DraculaCastle() :cd(100+rand()%10*10, rand()%10, rand()%5*5, 0, 20+rand()%2*10) :cdstrong(300, rand()%10, 30, 0, 30+rand()%3*10) {     cout << "<you enter the dark castle of Count Draculia>" << endl;     cout << "<everything around you is dusty>" << endl;     cout << "<then, you sense a presence over you... looking down upon you>" << endl; 中略     cout << "<your remaining HP>:" << vh.GetHP() << endl;     cout << "<your remaining MP>:" << vh.GetMP() << endl;     cout << "<Enemy's remaining HP>:" << cd.GetHP() << endl; } このようにcd(strong, weak 等)を何種類か書き、VanHelsingと戦えさせたいのですが。。エラーになります。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

基本的に #2 でいいと思うんだけど.... 「ちょっと違いました」とは, 何がどのように「ちょっと違った」のでしょうか?

Romans
質問者

補足

#2は public:      DraculaCastle();      void Play(); のDraculaCastle(); を定義しているんですよね?でもDraculaCastleは DraculaCastle::DraculaCastle(){     cout << "<you enter the dark castle of Count Draculia>" << endl;     cout << "<everything around you is dusty>" << endl;     cout << "<then, you sense a presence over you... looking down upon you>" << endl;     cout << "<you look up>" << endl;     cout << "<suddently, a dark shape falls off one of the main pillars supporting the battlements>" << endl;     cout << "<it falls right behind you, but very silently>" << endl;     cout << "<you notice it has a shape of a man, but has wings>" << endl;     cout << "I AM COUNT DRACULIA, AND YOU SHALL BOW DOWN BEFORE ME!!" << endl;     cout << "<the shape booms in a deafening voice>" << endl;     cout << "<finally... you realize that the legends were true...>" << endl;     cout << "I have come to destroy you, Count Draculia." << endl;     cout << "So it shall be..." << endl;     cout << "Ready..." << endl;     cout << "Fight!! " << endl;     cout << "<Weapons>" << endl;     cout << "<1. Silver Bullet: a strong but narrow attack. only damages attack location.>" << endl;     cout << "<2. Holy Flame Thrower: a not so strong but has a wide damage zone.>" << endl;     cout << "<3. SIGHT: tells you where the enemy is.>" << endl;     cout << "<4. POISON: poisons the enemy. enemy receives damage every turn.>" << endl;     cout << "<your remaining HP>:" << vh.GetHP() << endl;     cout << "<your remaining MP>:" << vh.GetMP() << endl;     cout << "<Count Draculia's remaining HP>:" << cd.GetHP() << endl; } のように、すでに定義してあるのです。それで、定義したいのはCountDraculiaで、DraculaCastleではないのです。

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.2

> ここ→ CountDraculia cdstrong(400, rand()%10, 30, 0); 指摘の部分は、初期化を行いたいということでしょうか? 初期化であれば、コンストラクタに初期化子を使って初期化する方法があります。 例えば、下記のように記述すればよいかと思います class DraculaCastle {      VanHelsing vh;      CountDraculia cd;      CountDraculia cdstrong; public:      DraculaCastle();      void Play(); }; DraculaCastle::DraculaCastle() : cdstrong(400, rand()%10, 30, 0) { }

Romans
質問者

補足

class CountDraculia {     int HP, pos, defense, poisoned; public:     CountDraculia(int HP1, int pos1, int defense1, int poisoned1):HP(HP1), pos(pos1), defense(defense1), poisoned(poisoned1){}     void Attacked(Assault n);     int GetHP() const{ return HP;} }; void CountDraculia::Attacked(Assault n){  ~内容~ } というのをさっきのやつの前に書いたのですが、上のをベースとして、敵を何種類か作れるようにしたいんです。 CountDraculiaオブジェクトをDraculaCastle(戦いの場と考える)クラス内でつくり、HP, pos, defense, poisoned などを初期化しようとしました。 Schwarz20さんの回答のを試しましたが、DraculaCastle(); はその後に定義されているので、ちょっと違いました。。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

宣言の中で関数は呼べないと思うが。

Romans
質問者

補足

すいません…宣言の中で関数を呼ぶ とはどういうことでしょうか?

関連するQ&A