「'this' は定数式では使用できません」というポップアップについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 「'this' は定数式では使用できません」というポップアップについて

Re: 「'this' は定数式では使用できません」というポップアップについて

#5

by usao » 8年前

> >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型インスタンスを生成する時になってみないと,どんな値になるのかがわかりませんよね)

Re: 「'this' は定数式では使用できません」というポップアップについて

#4

by UramnOil » 8年前

>>usaoさん
返信遅れてすみません。ご回答ありがとうございます。

>prod_d の実体が無いように見えるし
Projectile pro_dではなく
Projectile_Data pro_dでした...

>prod_d = new ... の行の左辺と右辺とで型が違うと思うし,
確保されるのがメモリのアドレスということを忘れてました...

>このnewのところで,MAX_SHOT_2 は定数ではないからそこも問題になると思うのですが
constでは定数の役割を担えないということでしょうか?

Re: 「'this' は定数式では使用できません」というポップアップについて

#3

by usao » 8年前

prod_d の実体が無いように見えるし,
prod_d = new ... の行の左辺と右辺とで型が違うと思うし,
このnewのところで,MAX_SHOT_2 は定数ではないからそこも問題になると思うのですが,

>コンパイルしたところうまく初期化できていませんでした...

ということは,この状態でコンパイル通って動作までさせたということでしょうか.

Re: 「'this' は定数式では使用できません」というポップアップについて

#2

by UramunOil » 8年前

記述漏れ

---Projectile.h---

コード:

#include "Projectile.h"
#include "DxLib.h"

「'this' は定数式では使用できません」というポップアップについて

#1

by UramnOil » 8年前

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];//ここで先ほどのエラー
}

ページトップ