
今年の9月にC++を学校ではじめた初心者です。
書いているプログラムで、コンパイルしようとしたときに、)が必要
と出てくるのですが、対応している()はあるので、どうすればいいか困っています。
使っているコンパイラはBorland C++ です。
よろしくおねがいします。
class DraculaCastle
{
VanHelsing vh;
CountDraculia cd;
ここ→ CountDraculia cdstrong(400, rand()%10, 30, 0);
public:
DraculaCastle();
void Play();
};
A 回答 (6件)
- 最新から表示
- 回答順に表示
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でコンパイルすると、違うメッセージが表示されています。
あまり深く追求しなくてもよいかと思います
コンパイラの構成を勉強したいのであれば、別ですが...
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;
}
この回答への補足
解決策、ありがとうございました。
上のコードを使ったらできました。ですが、なぜはじめの )が必要 というエラーがでたのでしょうか?
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;
}
この回答への補足
「: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と戦えさせたいのですが。。エラーになります。
No.3
- 回答日時:
基本的に #2 でいいと思うんだけど....
「ちょっと違いました」とは, 何がどのように「ちょっと違った」のでしょうか?
この回答への補足
#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ではないのです。
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)
{
}
この回答への補足
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(); はその後に定義されているので、ちょっと違いました。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
-
4
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
5
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
-
6
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
7
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
8
エラーの原因は?「この関数の定義が見つかりません」
C言語・C++・C#
-
9
エディットボックスのフォントを変えたい
C言語・C++・C#
-
10
ボタンが押された事を検知するには?
C言語・C++・C#
-
11
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
12
多重定義が起きている?--lnk2005エラー:VC++
C言語・C++・C#
-
13
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
14
適切な変換関数が存在しない???
C言語・C++・C#
-
15
Debug Assertion Failed?
C言語・C++・C#
-
16
【C++】関数ポインタの使い方
C言語・C++・C#
-
17
CString から LPCTSTRの型に変換
C言語・C++・C#
-
18
c言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
「.c」拡張子でC++文法を使...
-
cobolの文法チェックソフト
-
io.hをincludeするとそのような...
-
どのプログラミング言語ででき...
-
fortranでのNaNについて
-
変数(関数)名の頭に_
-
移植性の高いmakefileの作成
-
graph.hがincludeできない
-
volatile修飾について
-
Visual C++では問題があるのにg...
-
コンパイラフラグ(compiler fla...
-
関数の戻り値による変数の初期化
-
何も書いて無いのに警告が出る...
-
CPUが16bitでも32bitOSでコンパ...
-
あるプログラムのコマンドライ...
-
ファイルの開き方
-
65536は2の何乗なのでしょうか?
-
正しい五十音順について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C++ で、「)」が必要 というエ...
-
0除算して、落ちるプログラムと...
-
コンパイルできない
-
C++でアボート(Abort)で処理が...
-
io.hをincludeするとそのような...
-
volatile修飾について
-
Delphiの逆コンパイル
-
__extension__
-
Eclipseの環境設定について
-
linuxのセキュリティ対策と致し...
-
プリコンパイラとは?
-
fortranでのNaNについて
-
MFC
-
C言語のワーニングメッセージの...
-
関数の戻り値による変数の初期化
-
コンパイラについて
-
FORTRANとC++の連動について
-
Fortran90を使いたい
-
「.c」拡張子でC++文法を使...
-
PICマイコンによる乱数の表示に...
おすすめ情報