【質問】Fontクラスをメンバに持つクラスをさらにメンバに持つクラスを初期化したい
ごまだれ  2017/01/02(Mon) 00:03
初めまして、Siv3Dを用いてC++の学習をさせていただいています。
タイトルがわかりにくいですが、やりたいことは「クラスAがFontクラスを持ち、クラスBがクラスAを持つときにクラスBのインスタンスを作成する」ことです。試しに自分で実装を試みたところアクセス違反で強制終了してしまい、どうすればいいか見当がつかなかったのでここで質問させていただくことにしました。
初歩的なミスを犯しているとは思いますが、ご教示くださいm(_ _)m
ライブラリ: Siv3D(August 2016v2)

※ソリューション : https://www.axfc.net/u/3759933.zip
---ソースコード---
[ main.cpp ]
#include <Siv3D.hpp>
#include "file1.h"
void Main(){
TestClass1 tc1;
while (System::Update()){
tc1.draw();
}
}

[ file1.h]
#pragma once
#include <Siv3D.hpp>

class TestClass1 {
Font font{ 30 };
Rect rect{ { 100, 100 },{ 100, 100 } };
public:
void draw();
};

[ file1.cpp]
#include "file2.h"
#include "file1.h"
TestClass2 tc2;
void TestClass1::draw() {
font.draw(L"テスト");
rect.draw();
tc2.draw();
}

[ file2.h]
#pragma once
include <Siv3D.hpp>
class TestClass2 {
Font font2{ 30 };
Rect rect2{ {300, 100}, {100, 100} };
public:
void draw() {
font2.draw(L"テスト2");
rect2.draw();
}
};
記事編集
Reputeless  2017/01/02(Mon) 23:50
Siv3D のアセット (Texture, Font, Sound 等) をグローバル変数として初期化することはできません。

//グローバル変数
TestClass2 tc2;

の部分でエラーが発生していると考えられます。

グローバル変数の使用をやめるか、Font をアセット管理 ( https://github.com/Siv3D/Reference-JP/wiki/%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E7%AE%A1%E7%90%86 ) に移行することで解決します。
編集
ごまだれ  2017/01/03(Tue) 00:13
新年早々ご回答ありがとうございます。ご指摘の通りソースコードを修正してみたところ正常に動作しました。ぜひこれからもこのライブラリを用いて学習を続けていきたいと思っていますので、今後とも何かあればよろしくお願いしますm(__)m
編集
件名
Re: 【質問】Fontクラスをメンバに持つクラスをさらにメンバに持つクラスを初期化したい
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -