[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 12/31 01:11 / Filesize : 246 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.59【環境依存OK】



1 名前:デフォルトの名無しさん [2008/03/30(日) 01:50:26 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1204124447/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm



2 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 01:53:36 ]
           ____   ,. -‐''"7__,,..-─ァ 
           |::::::`/  /-‐─-='、> ,、
           `ヽ/   `>/  )   ヽ.>|_ヽ/|  _,,..-‐'"´ヽ.
            |/   <     ´)   Y--‐`''"´:::::::::::::::::/i__,,.. - 、
           /|     `>   、_)   | ̄V::::::::: , 、::::::::::::\| ヽ、,.ノ
          /::::|    < l  )     ./___∧::::::くH\:::::::/|-‐'" 
          l__,∧    \      ,イ:;:-‐‐-、__,,.ヽ-、, >:::\|´"'' ー、'"`ヽ
           /:::::ヽ、  __,>ー-‐<__フ   r'´    i:::::::/|    |  ノ 
            ̄ ̄ヽ、    ー‐-‐< !、   ゝ__,,..-<::::::\/___,,..-‐''" 
                `ヽr-、..,,_____,,.>フ` ̄|´ヽ.    ヽ:/      
                       く/   /|  |
                        \/ \/

     _____                   ___     ____          ___   ___
   / ____/ /´ ̄|    / ̄l  /´ ̄/  /___/     /____/ l ̄l  / ̄/ /___/ /__  \
  / /       .  ̄ ̄     ̄    ̄ ̄   ___              ̄    ̄  ___     /  /
  \ \_l ̄/  /´ ̄ ̄ |  /´ ̄ ∨ ̄ ̄/ / __/    / ̄/  / ̄/  | ̄∨ ̄/  / __/ / ̄ ̄ /
   \_  /  / / ̄|  | /  /l   /|  / / /___    /  /_/  /   |     /  / /___  /  /\ \
      / /  /__/   |_|/,_,/ |,_,/ |,_/ /___/   /____/    | __/  /___/ /_/   \ \
   .  / / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \ \
      ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    ̄


3 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 01:59:08 ]
し、死んでる・・・

4 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 02:01:37 ]
(・ω・`)乙 ←ポニーテール

5 名前:デフォルトの名無しさん [2008/03/30(日) 03:00:43 ]
正直、番号なんてどうでもいいよな。

6 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:20:29 ]
Ver+=9になっとるがな。

7 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:27:06 ]
>>1


GUIアプリ作りたいけど……中々そこまで勉強が進まない。
delphiとかrubyの方がいいんでしょうかな。

8 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:35:17 ]
>>1
乙だけど次は54くらいに戻そうぜ もしくは60-6あたりで。

>>7
楽にやるならGUIでrubyは無い気がするが…
delphiは少し古くなってきているのでC#あたりがおすすめ

9 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 09:15:28 ]
08/02/05-08/02/20
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/

08/02/20-08/02/27
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1203478421/

08/02/28-08/03/14
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1204124499/

08/03/14(3レスのみで終了)
【初心者歓迎】C/C++室 Ver.51【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1205496128/

08/02/28,08/03/14-08/03/30
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1204124447/

スレッド移行としてはこんな流れみたいなので、前スレが Ver.51相当、今スレは Ver.52 相当と見なせば良さそうだけどね。

10 名前:1 [2008/03/30(日) 09:29:03 ]
ごめん、こんなに大変なことになるとは…
軽い気持ちで59にしてしまったばかりに、、、、
俺がこのスレの最後にまた出てきて責任をもって次はVer 53を立てろと言うよ。



11 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 10:38:16 ]
大丈夫。バージョンなんてただの飾りです。

12 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 10:53:17 ]
大変なことにはなってないから、気にすんなw

13 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:09:59 ]
もしくは59にたどり着くまで保守してくれればおkwww

14 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:18:20 ]
>>8
thx。そうか、delphiは古いか。
やっぱスタジオゲットしたほうがいいな。

15 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:27:35 ]
C++で、演算子の多重定義というところの問題で詰まってます
「operatorを使って、++x、x++をクラス型のオブジェクトに適用できるようにしました
では、前置演算子関数から後置演算子関数を呼び出すか、またはその逆にして、スマートにしたものを作れ」
という問題です

メインのプログラムで呼び出すときに
++x は x..operator++()
x++ は x..operator++(0)
と解釈されるとあります
しかし、前置関数、後置関数の区別の方法がどうにも理解できません
前置に後置を入れると、そもそも引数を受け取らない関数から、どうやって受け取る関数を実行させるのか
またはその逆がどうやったらできるのか
実際に思いついたのはこんなものです
Counter& operator++() {
Counter x = *this;
if(cnt < UINT_MAX) cnt++;

if(t != 0) {
Counter y; y = x; *this = y; }
return *this; }
関数を呼び出してないし、実際にコンパイルしてみると、左辺値が必要というエラーで失敗します
解法をおしえていただけないでしょうか

16 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:36:17 ]
tってなんだよ

17 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:39:55 ]
いきなり答えを出していいのか。

前置インクリメントは普通に定義した上で、
こういう風に前置インクリメントを使う後置インクリメント演算子関数をクラスのメンバとして作る。
無理にメンバにする必要もないけど。
Counter operator ++(int)
{
  Counter x = *this;
  ++*this;
  return x;
}

18 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:58:27 ]
>>16
いや引数をどうにかしようとおもって、後置で0が入れられるなら、前置は何も入らない!とおもってやった名残です
つまり消し忘れなのです

>>17
*thisの++がoperator++()ということですかなるほど
実行できました
ありがとうございました

19 名前:デフォルトの名無しさん [2008/03/30(日) 17:08:48 ]
C++ で2次元配列へのポインタ返したいときにどういう風に記述すればいいのでしょうか。
例えば、以下の関数で???の部分はどのような記述になりますか。

??? getArray(){

const int ary[ ][5] = {
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 }
};

return ary;
}

また受けて側では
どのように取得すればいいのでしょうか。



20 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:16:24 ]
>>19
・配列を返すことはできない。
・ローカル変数のアドレスを返すことはできない。
従って、こんなもんかな。
const int (* getArray())[5]
{
static const int ary[ ][5] = {
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 }
};

return ary;
}

int main()
{
const int (* a)[5] = getArray();
return 0;
}
尤も、これが正解かどうかは別の問題。



21 名前:19 mailto:sage [2008/03/30(日) 17:26:25 ]
>>20
ありがとうございます。
実は実際のソースでは、2次元配列はクラスのprivate static const なメンバ変数なのですが
クラスの外からアクセサを使ってアクセスしたいのです。
その場合の記述も上記のようなものになるのでしょうか。

22 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:28:01 ]
だったら参照でいいんでない?

23 名前:19 [2008/03/30(日) 17:48:38 ]
>>22
すいません。2次元配列への参照を戻す関数の宣言は
どのように書けばいいでしょうか?

24 名前:デフォルトの名無しさん [2008/03/30(日) 17:49:30 ]
こんばんは。今月、C++を始めたばかりの初心者です。
お勧めの入門書・参考書があれば教えてください。

25 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:20:55 ]
>>23
const int (& getArray())[5][5] const {...; return ary;}

const int (& a)[5][5] = ....getArray();

26 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:21:16 ]
>>24
初心者スレか書籍スレへ。

27 名前:19 mailto:sage [2008/03/30(日) 18:32:02 ]
>>25
ありがとうございます。
ややこしいですね・・・

28 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:34:43 ]
>>24
ないのでお帰りください。

29 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:41:35 ]
>>24
Cが理解出来ればC++は根性で分かる
クラス、派生、オーバーライド、演算子のオーバーライドとかね。
あんなもん構造体のラッパー
STL、テンプレートは知らんでも何とかなる

C++勉強中に.NetのC++をmanagedでやると
永遠に理解出来なくなると思われ。

30 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:52:45 ]
>>29 こいつ初心者だな・・・



31 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:01:37 ]
>>30
・・・まじ???
自称「C++得意です」なんですけど…


32 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:15:44 ]
テンプレート自分で書くかはともかく、STL使わないC++ってもはや全く想像できないなぁ。
まあ、俺もCから移った直後は>>29みたいなノリだったんだけどね。
「STL? なにそれおいしいの?」「テンプレート? つかわねーよhahaha!!」って。

33 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:17:07 ]
STLとtemplateがないC++なんぞ使いたくない

34 名前:19 mailto:sage [2008/03/30(日) 19:19:15 ]
わけわかめなエラーが出て困ってます。助けてください。
たとえば"error C2143: 構文エラー : ';' が '<cv-qualifer>' の前にありません"などです。
開発はVS2008で行っています。

class Map{

public:
virtual const int (& getMap())[1000][1000] const = 0;

};

class FirstBasement : public Map{

private:
static const int floor[30][30];

public:
// 地図の状態を返す
virtual const int (& getMap())[30][30] const;

};

const int (& FirstBasement::getMap())[30][30] const{

return FirstBasement::floor;
}


35 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:23:11 ]
>>34
constの位置が違う。
virtual const int (& getMap() const)[1000][1000] = 0;

36 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:28:29 ]
typedef使ったりboost::multiarray使ったほうが可読性が高まると思うが

37 名前:19 mailto:sage [2008/03/30(日) 19:29:05 ]
>> 35
うまくいきました。ありがとうございます。
ただ配列の大きさも同じでないとオーバーライドできないのですね。

38 名前:19 mailto:sage [2008/03/30(日) 19:31:08 ]
>>36
boostはまだ知らないのですが、typedefはそうですね。
こういう時にこそ、使うべきですよね。勉強になります。

39 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:31:43 ]
自分は趣味でやってるだけだけどCで書こうとするとSTLないから倍の時間がかかるよ。
C使いこなせる人尊敬するわ

40 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:34:11 ]
CとC++の中で最も優先して勉強するのはSTLと思う 



41 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:37:08 ]
>>37
配列型は要素数が違えば別の型。

型が違えばオーバーライドにならない。
戻り型と違う型はreturnできない。
なんだか難儀しそうだね。

42 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:39:30 ]
34なんて全然分からんw強引にキャストする所だったw
配列はついついポインタにキャストするからなぁ

>>39
Cだとクラス間の上下関係無いから、いつでもどこでも呼び出せて楽じゃない?
メンバにstaticつけた瞬間に敗北した気がする。
classやらの基本構文書いて15分、とかイライラする。
Cならいきなり呼び出せるのに、て思うとね〜

というか、Cから入ってC++使う機会が少なかったから
脳内でクラス構造が上手に作れないらしいw

STLよりANSIライブラリの方が手軽で使い易いし覚え易いし・・・

43 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:08:44 ]
>>42
ウン百万行ってソースを担当すりゃわかるようになる。
>いつでもどこでも呼び出せて楽
楽だからスパゲッティーが生まれやすくなる。

44 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:17:50 ]
そうだな。設計とは制限することだと言うし。

45 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:26:15 ]
厳密にアクセスの流れを制限することが売りというか
オブジェクト指向のキモというか

従来どおりにやろうとするなら単なるオーバーヘッドの増加でしかないようなw

46 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:27:16 ]
まぁ趣味でやる程度の規模ならCでも全然問題ない気がする

47 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:30:07 ]
29=42は超初心者 

48 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:39:37 ]
string("hagehage");

って、Cスタイルキャストですか?コンストラクタ呼んだことになってますか?

49 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:41:57 ]
>>42
いつでもどこでも呼び出せるようにして、良いんじゃない?
俺は良いと思うよ。STLは使うことを進めるけど。

オブジェクト指向もC++で扱えるパラダイムの一つに過ぎないからね。

ラムダ万歳。

50 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:42:48 ]
>>48
コンストラクタ。



51 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:47:59 ]
>>50
ありがとうございます。
いままで
static_cast<string>("hagehage");
って書いてたんですが、今度から>>48ですませることにします。

52 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:59:35 ]
>>51
状況によるだろうけど、それ書く機会少なくない?
明示しなくても変換(コンストラクタが選択)されるよ。
   void f(const std::string& s);
   f("aaa"); //OK
   std::string s = "aaa"; //OK

53 名前:25 mailto:sage [2008/03/30(日) 21:03:40 ]
>>19
ゴメン、constの付け所を間違えた。
やはりあれだな、>20が真実を語っていたな。

54 名前:デフォルトの名無しさん [2008/03/30(日) 21:07:04 ]
下の"移動アルゴリズム", "移動可能かチェック"で以下のようなエラーが出るんですが
何が悪いのでしょうか。

エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 21 RPG
エラー 4 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 21 RPG

#include "Map.h"
#include "EDirection.h"
#include "DxLib.h"

namespace hogehoge{

class MoveStrategy{

public:
// 仮想デストラクタ
virtual ~MoveStrategy();

// 移動アルゴリズム
virtual EDirection Move(const Map& map) const = 0;

protected:
// 移動可能かチェック
virtual bool IsMovable(const Map& map, const int& direction) const;

};

}


55 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:09:35 ]
>>52
えっと、メンバのreplace使う時とかで、リテラルの長さがほしくてstringに入れる場合、つまり
str.replace(str.find("あ"),(string("あ")).length(),string("い"));
こういう場面とか、文字列を+でつないでいく、たとえば
str = "my name is " + name + "\n"; // エラー
str = string("my name is") + name + string("\n");
こういう場面みたいな時です。

56 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:19:20 ]
>>54
Mapが定義されて無いんじゃね?

>>55
それならおk。

57 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:26:00 ]
>>55
見逃してた。stringへの+も明示する必要ないから
string("\n") は "\n" だけで良いよ。

str = string() + "my name is" + name + "\n";
でもおk。

58 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:27:50 ]
>>56
ありがとうございます。解決しました。
確かにMapがおかしかったです。
原因はMapで純粋仮想関数ではなく、ただの仮想関数を宣言していただけなのに
その定義を持っていなかったことでした。

59 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:36:52 ]
>>57
>str = string() + "my name is" + name + "\n";
わーお(`・ω・´)いろいろありがとうございます。

60 名前:超初心者29=42 mailto:sage [2008/03/30(日) 21:39:35 ]
>>43
ン百万行・・・
いいとこ10万行ぐらいだな、触ってたのは

ン百万のソースを触るなんてオープン系の人?(´・ω・`)??

PCアプリでン百万行たって、
モジュール化進んでるからン百万だろうが怖くないしな

名前空間なんかイラネの世界で生きて来たからな〜w

Cだとヘッダ単位でモジュール化したりするモンだが。。
規模が違うんだろうな〜〜。。。。



61 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:45:24 ]
モジュール化?なにそれ?なスパゲッティコードを君にプレゼントしよう

62 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:49:29 ]
規模が大きくなってくると、人員の質にバラ付きがでてくるのさ

63 名前:54 [2008/03/30(日) 21:50:15 ]
ちょっと教えてください。
以下のようなクラス宣言があります。
#include "Player.h"
#include "Enemy.h"
#include "Map.h"
#include <vector>
namespace hogehoge{
/**********************************
* 概要: 地図の振る舞いを管理する *
**********************************/
class Map{
public:
static const int CHIP_SIZE = 15;
protected:
Player* player;
//std::vector<Enemy> *enemy;
public:
// コンストラクタ
Map();
//仮想デストラクタ
virtual ~Map();
// 地図を表示する
virtual void Display() const = 0;
// 地下1階への状態を返す
virtual const int (& getMap() const)[30][30] = 0;
};
}

64 名前:54 [2008/03/30(日) 21:51:09 ]
この場合以下のエラーが大量に出てしまいます。
エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG

ここから#include "Enemy.h"を取ると、エラーなくコンパイルできます。
Enemy.hは以下のようになっています。
#include "Map.h"
#include "EDirection.h"
#include "DxLib.h"
namespace hogehoge{
class MoveStrategy{
public:
// 仮想デストラクタ
virtual ~MoveStrategy();
// 移動アルゴリズム
virtual EDirection Move(const Map& map) const = 0;
protected:
// 移動可能かチェック
virtual bool IsMovable(const Map& map, const int& direction) const;
};
}
上のエラーはどういう意味なのでしょうか。

65 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:52:20 ]
>>60
同じ同じ。
言語のサポートが優位な点だけど、
大枠でのプログラム層なアーキテクチャはC,C++で左右されないと思うよ。

66 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:01:25 ]
>>54

>型指定子がありません - int と仮定しました
コンパイラ:「const Map」がよく分からないので、「const int Map」だと考えますね

>',' が '&' の前にありません
コンパイラ:「const int Map&」、なんか変数名のあとに「&」が出て来たんですけど

67 名前:66 mailto:sage [2008/03/30(日) 22:04:46 ]
一応補足。
2つ目のエラーは、1つ目の仮定のせいで発生してるってことね。

68 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:07:33 ]
>>66
Map ってクラスが入れ子になってるからじゃないの?
ヘッダの相互参照になってる

enemy.h の頭に
class Map;

ての入れてコンパイル通らない?
もしくは cpp 内のみにヘッダ参照宣言入れて、ヘッダ内からの include
やめるとか
MS VC ならエラー行間違えない筈なんだけどな

すげー適当に答えてるけどw


>>61
>>62
共同作業でのプログラミング経験ほとんど無いんで〜
他人の綺麗なコードをスパゲティにした事なら何度もあります。未だバレてませんヨ、HAHAHA

69 名前:54 mailto:sage [2008/03/30(日) 22:18:50 ]
>> 66, 68
ありがとうございます。

class Map;
class MoveStrategy{
};

class Map;
class Enemy{

};

とすると、エラーはごっそり減ったのですが、まだ以下のようなエラーが残ります。
エラー 1 error C2061: 構文エラー : 識別子 'MoveStrategy' d:\root\gamecreation\rpg\enemy.h 16 RPG

ヘッダの相互参照というのは
#ifndef をしていたら、必ず防げるものではないのですか?


70 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:28:30 ]
class A{
  B b;
};
class B{
  A a;
};

要はこれと同じ状態。前方宣言でも回避できない。これも
class A{
  A a;
};
という問題に帰着できるから分かるだろ



71 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:32:18 ]
>>69
無理かと

#include "map.h"
#include "Enemy.h"
の2行は次の形に展開される

class Map {
... void ( Enemy *pEnemy );     <= ★注意★class Map 宣言より上に class Enemy 宣言が無い
}                                 この時点でコンパイラは class Enemy の情報を持たないのでエラー
class Enemy {
... void ( Map *pMap );
}
となり、エラー

だから #include が展開された時に

Enemy.cpp :
 class Map;
 class Enemy {
  ... void ( Map *pMap );
 }

Map.cpp :
 class Enemy;
 class Map {
  ... void ( Enemy pEnemy );
 }

にするのが手っ取り早い
VC 使ってるなら #pragma once 使った方がコードスッキリするよ

72 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:32:45 ]
ゲームのように扱うデータが多かったりすると
必然的にコード量は増えるし、オブジェクト指向も取り入れるんだろう。

制御屋だとシステムの大きさに比例してでかくなるけど
担当も細分化されて、一人で担当するところはそれほどでもないね。
安全に関わるから。

73 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:40:43 ]
>>72
エミュレータ使ってもバグ取れないなんてザラだからねぇ・・・
ブレークポイント張りずらいし

組込み系だとC++コンパイラが無いこと多い
ミドルウェアでC以外のもの見た事ないし。
linuxのほとんどのコアソースがCでなのも傍証してる(ソースが古いのも一因)

gccだけはブレークかけても、どこがバグなのかさっぱり分からん(´・ω・`;;;)
モジュール化の概念はドコ行っても同じかも

74 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:42:58 ]
最近は組み込みもC++にシフトしてるよ
例外とかメモリ確保とか制限は多いけど

75 名前:54 mailto:sage [2008/03/30(日) 22:43:31 ]
>>70, 71
一応上のエラーは,これも class MoveStrategy; を追加することで消えました。
有益な情報ありがとうございます。
この問題に関して不案内なところがあるので、もう少し勉強してみます。

76 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:51:40 ]
>C++コンパイラが無いこと
そこでcfrontですよ

77 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:06:52 ]
日立のやつはC++使えるよね
PCみたいにはいかないけど。

78 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:17:00 ]
組込みでmallocに頼るのがどうも・・・
1週間後にフリーズ>再起動したら直りました、で
原因がmallocじゃどうにもならないしな〜。
RAMの必要量が予想出来ないしなぁ。。。

C++の展開命令見ると何書いてあるか分からないしなぁ
Cならまだしも。

79 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:49:40 ]
Templateの諸機能が動的に実装してある

80 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:05:05 ]
すみません。質問させて下さい。XP+VC++ 9.0です

【やりたいこと】 データファイルを読み込んで、ダイクストラ法を使って最短ルートを求める

【条件】
ノードは可変数個、コストは全て正の値、スタートノード及びゴールノードは
dijkstra.exe -start_node -goal_node のようにプログラム開始時に与える。

【何が分からないのか】
可変数個のノードや、エッジがどのノードに向かって延びているか、
かかるコストはいくらか等のデータをどのようにデータファイルに格納するか、データファイルの構造決定。
データファイルの構造が決定したとして、どのように可変数個のデータを読み込むか、
どうやってデータの終わりを探すか。ファイルからデータを読み込んだとして、データの整合性を
どのように検証するか。

分からないことばかりですが、誰かヒントだけでも教えて下さい。宜しくお願いします。



81 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:25:26 ]
>>19
亀レスだけど、typedefするのも1つの手。

typedef int IA_5[5];
IA_5 array[3] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; // == array[3][5]
IA_5* func(){ return array; }

int main()
{
IA_5* p = func();
for(int i = 0; i < 3; ++i){
for(int j = 0; j < 5; ++j) cout << p[i][j] << " ";
cout << endl;
}
return 0;
}


82 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:37:54 ]
>>80
可変個のデータ読み込みは、非常に基礎的で、ダイクストラ法と関係ないですよ
それをまず出来るようになって下さい

83 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:38:58 ]
>>80
C++でも良いんですか? もし良ければSTLを使ってノードを管理すると簡単と思います

84 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:57:59 ]
>>82-83

レスありがとうございます。私の修行が足りないようで、お恥ずかしい限りです。
勉強して理解を深めてからもう一度出直してきます。スレ汚してすみませんでした。

85 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 07:23:05 ]
すこし作ったよ

#include <vector>
#include <iostream>
#include <set>
using namespace std;

class node {
public: unsigned int dis,ver;
node(){ ver=dis=-1;}
node(unsigned int i, unsigned int d){ dis=d; ver=i; }
bool operator < (const node &x) const { return (dis<x.dis); }
};

typedef set<node> vertex;

main(){
vector< vertex > g; //グラフの定義
g.push_back(vertex()); //頂点追加
g[0].insert(node(1,3)); //辺と距離の追加
g[0].insert(node(2,5));
g[0].insert(node(3,2));
vertex::iterator p=g[0].begin(); 
cout<<(p->ver); // 最も短い距離の頂点を出力
}

86 名前:デフォルトの名無しさん [2008/03/31(月) 11:15:09 ]
VC++2008EEで勉強中なのですが、
いろんなサイトの見よう見まねで下記ソースを試してみたところ
ビルドして一瞬ウィンドウが出て終わってしまいます。
これはreturn 0のせいかと思って、return 0を消しても
やはり一瞬で終わってしまいます。
どうすれば終了しないでコマンドプロンプトのような画面で
文字が確認できるようになるのでしょうか。

#include <iostream>
int main(void){
using std::cout;
using std::endl;
int a;
int &alias = a;
alias = 100;
cout << "a = " << a <<endl;
cout << "alias = " << alias <<endl;
return 0;
}



87 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:32:42 ]
getchar();
return 0;

88 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:41:03 ]
>>87
ありがとうございます!ようやく確認できるようになりました。
キーボード入力待機状態にして止めるんですね。
勉強になりました。

89 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:41:05 ]
Ctrl + F5

90 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:45:24 ]
>>89
デバッグなしでビルドというのでも止まるんですね。
ありがとうございます。
C言語はいろいろ解らないことばかりで非常に助かります。



91 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:48:00 ]
>>86
コマンドプロンプトで実行するか、>>87

92 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:04:44 ]
>>90
それらはCの知識ではない。Windowsの使い方の知識とVisualStudioの使い方の知識だ。

93 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:36:21 ]
>>84
Boostのグラフライブラリを使う

94 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:10:05 ]
builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm
ポインタの勉強をしているのですがサンプルのコードを動かしてみたところうまくいきません

95 名前:デフォルトの名無しさん [2008/03/31(月) 14:13:24 ]
もうアパートを探すのはつかれたよ。
はやくプログラミングしたいよ。



96 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:20:17 ]
>>94
コメント欄がすごいことにw

97 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:23:25 ]
>>94
もうこの人終わりだなw

98 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:28:30 ]
int *n;
*n = 5; /* ポインタ変数nに値5を代入 */

初期化もポイントする先も決めてないポインタをそのまま使うのって非常に不味いよねぇ
自分ははじめにポインタの初期化を必ずするよう教わったがなぁ


99 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:40:39 ]
>>96>>97
あー、前スレで話題になった奴か。
エピステーメーにまで指摘されていたのに未だに記事の修正が入らないのね。
編集がコメントなにやらゴミを書いているけどそんなものは記事の修正とは認められないし。
この程度のコメントじゃZDNETとしても著者としても痛くも痒くもないのでしょ。

100 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:46:23 ]
>>99
もしや本人さま(えぴさん)で?








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef