検索結果 10 件

by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: あるクラスを継承しているtemplate
返信数: 5
閲覧数: 3282

Re: あるクラスを継承しているtemplate

私用でしばらく来れないので、解決チェックをつけておきます。
また暇があるときにいただいた回答を参考にして考えさせてもらいますm(_ _)m
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: あるクラスを継承しているtemplate
返信数: 5
閲覧数: 3282

Re: あるクラスを継承しているtemplate

返信くださったお二人方ありがとうございます! ええと、考えていた状況としては、 vector<Enemy>をもつEnemyManagerとvector<Shot>を持つShotManagerを共用できたらいいなと考えていたんですが、(EnemyとShotはObjから継承) やっぱり個別に作ったほうがいいですかね…? h2so5 さん、 テンプレート型の制約を追加する場合はキャストを使ってください。 とは、tk-xleader さんのおっしゃていることでしょうか? tk-xleader さん、 わざわざ書いてくれてありがとうございます。けっこう長くて難しいですね…理解できないところがいくつかあり...
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: あるクラスを継承しているtemplate
返信数: 5
閲覧数: 3282

Re: あるクラスを継承しているtemplate

あ、一応追記しておきますが、このコードで動くのか、ということではなく、template宣言とかを変えて、こういうことができるようにできるか、という質問です。
CBaseのポインタをもって、そこにキャストすれば同じようなことができるのはわかりますが、この場合はよくてもvector<T>とかを持たせたいときに面倒なことになると思うのです。
なにか解決方法があればよろしくお願いします。
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: あるクラスを継承しているtemplate
返信数: 5
閲覧数: 3282

あるクラスを継承しているtemplate

初歩的な質問です。 templateで、それがあるクラスを継承しているようにできるでしょうか。 たとえば、 class CBase{ public: void basefunc(); }; class CDerived1 : public CBase{ }; class CDerived2 : public CBase{ }; template<class T>; class Hoge{ T t; void func(){t.basefunc();}//TがCBaseを継承していることが決まっていればできる? }; 今入門書が手元になく、またググってもよくわからなかったので質問させていただきま...
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

define.hはgraphic.hからincludeされているため、#pragma onceの効果で読まれないと思います。[/quote]

なるほど、つまり、#pragma once のせいで読み込まれる順番が違ってしまった,という感じですね。
大体わかりました、ありがとうございます!

こんなに親切な回答をありがとうございました、とても助かりましたm(_ _)m
自分もc++がわかるようになってきたらいつかこの掲示板に恩返しをしたいと思いますw
では、解決チェックをつけておきます。
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

みけCAT さんが書きました:define.h内でincludeしているobj.hで、GrSetSetの定義より前にObjクラスの定義が来るからだと思います。
なるほど!そんなことがあるんですか
しかしdefine.hでobj.hをincludeしたとき、obj.hの先頭の#include"graphic.h"は読まれないんですか?
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

またもや連投すいません main内で、obj.hとgraphic.hの内容を使ってみても、エラーは出ませんでした。 やはり循環参照をいうやつなんでしょうか?#pragma once していれば大丈夫だとおもっていたんですが… 各ファイルの#include 部分を書いておきます。 //ヘッダ================================================================================= obj.h #pragma once #include "graphic.h" #include <cmath> #include "DxLib....
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

わざわざありがとうございます!

同じようにやってみたところ、こちらでも例のエラーは消えました。
その後、コメントアウトする位置を変えていろいろやったところ、
define.h

コード:

#pragma once
//#include "obj.h" ←ここを消しただけで、あのエラーが出なくなる 

static const int ENETYPE = 6;
ということがわかりました。
実際私も何を考えてincludeしたのかはわかりませんw

これでとりあえずは解決したのですが、このエラーの理由はいったい何なんでしょうか…?
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

usaoさんのご指摘で気づいたのですが、コードを張り付け間違えてました。。。わかりにくいことになってしまってすいません。。。 上で//graphic.hと書いてある部分は//graphic.cppです。 //本当のgraphic.h #pragma once #include<vector> #include <string> #include <map> #include "define.h" static int dummygr; void makedummy(); class GrSet{//必要があれば回転とサイズを実装 std::vector<int> img; std::vecto...
by 五穀豊穣
11年前
フォーラム: C言語何でも質問掲示板
トピック: [C++]別ファイルでクラスが未定義だといわれる
返信数: 13
閲覧数: 8768

Re: [C++]別ファイルでクラスが未定義だといわれる

みけCAT さんが書きました:Graphicクラスの定義が見つからないのでそれが通るのかはわかりませんが、
クラスを前方宣言だけでいいのは、そのクラスのポインタや参照を使うときだけだという気がします。

ポインタ→どんな型のポインタでも、あるシステムでのポインタのサイズは一定(例:4バイト)
クラスそのもののデータ→もちろんその構造によってサイズが変わる
あれはエラーが起きてからこれで治らないかと適当にぶち込んだものでしたw

詳細検索ページへ移動する