配列のサイズをコンパイラに通知する方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
adv
記事: 2
登録日時: 8年前

配列のサイズをコンパイラに通知する方法

#1

投稿記事 by adv » 8年前

環境
Windows10
VC++ 2015
DirectX11_1

IViewPort.h

コード:

#pragma once
#include <string>

struct ID3D11Device;
struct ID3D11DeviceContext;
struct D3D11_VIEWPORT;

class IViewPort {
public:
	IViewPort();
	IViewPort(const IViewPort &obj);
	void ViewPortRelease();

	bool setViewPort(ID3D11DeviceContext *context);
	bool getViewPort(ID3D11DeviceContext *context);

	bool setGPLSViewPort(unsigned int idx, const D3D11_VIEWPORT viewport);
	bool getGPLSViewPort(unsigned int idx, D3D11_VIEWPORT &viewport);

#ifdef _Debug
	bool ViewPortDebug(ID3D11Device *device, std::string name);
#endif
protected:
	D3D11_VIEWPORT viewport[16];//D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE(16)

};
ヘッダに↑のコードを書いた際に出たエラーですが・・
error C2148: 配列サイズの合計は 0x7fffffff バイトを超えることはできません。
error C2079: 'IViewPort::viewport' が 未定義の struct 'D3D11_VIEWPORT' で使用しています。
と出ており、この時ヘッダに#include <D3D11_1.h>をインクルードすることで解決できる事は分かっていますが、
#include <D3D11_1.h>を読み込まず解決する方法ってありますか?

ps.
C++等の知識は独学な部分が多く知識が足りてない部分がありますがよろしくお願いします

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列のサイズをコンパイラに通知する方法

#2

投稿記事 by みけCAT » 8年前

viewportをD3D11_VIEWPORTへのポインタにして、
ヘッダではなくこのクラスを実装しているクラスでD3D11_1.hをインクルードする。
コンストラクタでviewportに配列を確保し、デストラクタで開放する。
というようにするといいかもしれません。
このとき、このオブジェクトをコピーする時に配列への参照ではなく配列自体がコピーされるように、代入演算子とコピーコンストラクタも定義すると安全です。
(The Rule of Three)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

adv
記事: 2
登録日時: 8年前

Re: 配列のサイズをコンパイラに通知する方法

#3

投稿記事 by adv » 8年前

返答ありがとうございます!

動的性生後shared_ptr等で管理するというのも一つの手なのでしょうけど、もう少し調整してみたいと思います

閉鎖

“C言語何でも質問掲示板” へ戻る