ページ 1 / 1
「'this' は定数式では使用できません」というポップアップについて
Posted: 2017年6月15日(木) 17:00
by UramnOil
Visual Studioでクラスのコンストラクタでconstを定義し、それを配列の要素数に指定しようとしたのですが、「'this' は定数式では使用できません」と出てきてしまい、コンパイルしたところうまく初期化できていませんでした...
解決方法を教えてくださいm(_ _ )m
コードは以下の通りです
---Projectile.h---
コード:
class Projectile : Entity
{
public:
typedef struct Projectile_Data
{
//弾の座標
int x, y;
//発射状態
int flag;
} Projectile_Data;
private:
static Projectile pro_d;
//Entityが一度に打てる打てる最大の列
const int MAX_SHOT_1;
//Entityが一度に打てる最大の弾数
const int MAX_SHOT_2;
};
---Projectile.cpp---
コード:
Projectile::Projectile(int M_SHOT_1, int M_SHOT_2) : MAX_SHOT_1(M_SHOT_1), MAX_SHOT_2(M_SHOT_2)
{
pro_d = new Projectile_Data[MAX_SHOT_1][MAX_SHOT_2];//ここで先ほどのエラー
}
Re: 「'this' は定数式では使用できません」というポップアップについて
Posted: 2017年6月15日(木) 17:02
by UramunOil
記述漏れ
---Projectile.h---
コード:
#include "Projectile.h"
#include "DxLib.h"
Re: 「'this' は定数式では使用できません」というポップアップについて
Posted: 2017年6月15日(木) 17:23
by usao
prod_d の実体が無いように見えるし,
prod_d = new ... の行の左辺と右辺とで型が違うと思うし,
このnewのところで,MAX_SHOT_2 は定数ではないからそこも問題になると思うのですが,
>コンパイルしたところうまく初期化できていませんでした...
ということは,この状態でコンパイル通って動作までさせたということでしょうか.
Re: 「'this' は定数式では使用できません」というポップアップについて
Posted: 2017年6月16日(金) 19:46
by UramnOil
>>usaoさん
返信遅れてすみません。ご回答ありがとうございます。
>prod_d の実体が無いように見えるし
Projectile pro_dではなく
Projectile_Data pro_dでした...
>prod_d = new ... の行の左辺と右辺とで型が違うと思うし,
確保されるのがメモリのアドレスということを忘れてました...
>このnewのところで,MAX_SHOT_2 は定数ではないからそこも問題になると思うのですが
constでは定数の役割を担えないということでしょうか?
Re: 「'this' は定数式では使用できません」というポップアップについて
Posted: 2017年6月17日(土) 07:43
by usao
> >prod_d の実体が無いように見えるし
> Projectile pro_dではなく
> Projectile_Data pro_dでした...
prod_dがstatic と宣言されているので,実体を別途定義する必要がある,という話です.
(提示コードでは定義部分が省略されているだけなのかもしれませんが)
また,
> Projectile_Data pro_dでした...
これでもnewの結果を受け取る型としては間違っています.
> constでは定数の役割を担えないということでしょうか?
new Projectile_Data[MAX_SHOT_1][MAX_SHOT_2];
この記述は
Projectile_Data[MAX_SHOT_2] 型のデータ を
MAX_SHOT_1 個つくる
という意味になるかと思います.
この書き方では
動的な個数指定は MAX_SHOT_1 だけであって,
MAX_SHOT_2は,コンパイル時に値が定まっているある必要があります.
(対して,MAX_SHOT_2の値はProjectile型インスタンスを生成する時になってみないと,どんな値になるのかがわかりませんよね)