【初心者歓迎】C/C++室 Ver.59【環境依存OK】
at TECH
1:デフォルトの名無しさん
08/03/30 01:50:26
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
スレリンク(tech板)
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2:デフォルトの名無しさん
08/03/30 01:53:36
____ ,. -‐''"7__,,..-─ァ
|::::::`/ /-‐─-='、> ,、
`ヽ/ `>/ ) ヽ.>|_ヽ/| _,,..-‐'"´ヽ.
|/ < ´) Y--‐`''"´:::::::::::::::::/i__,,.. - 、
/| `> 、_) | ̄V::::::::: , 、::::::::::::\| ヽ、,.ノ
/::::| < l ) ./___∧::::::くH\:::::::/|-‐'"
l__,∧ \ ,イ:;:-‐‐-、__,,.ヽ-、, >:::\|´"'' ー、'"`ヽ
/:::::ヽ、 __,>ー-‐<__フ r'´ i:::::::/| | ノ
 ̄ ̄ヽ、 ー‐-‐< !、 ゝ__,,..-<::::::\/___,,..-‐''"
`ヽr-、..,,_____,,.>フ` ̄|´ヽ. ヽ:/
く/ /| |
\/ \/
_____ ___ ____ ___ ___
/ ____/ /´ ̄| / ̄l /´ ̄/ /___/ /____/ l ̄l / ̄/ /___/ /__ \
/ / .  ̄ ̄  ̄  ̄ ̄ ___  ̄  ̄ ___ / /
\ \_l ̄/ /´ ̄ ̄ | /´ ̄ ∨ ̄ ̄/ / __/ / ̄/ / ̄/ | ̄∨ ̄/ / __/ / ̄ ̄ /
\_ / / / ̄| | / /l /| / / /___ / /_/ / | / / /___ / /\ \
/ / /__/ |_|/,_,/ |,_,/ |,_/ /___/ /____/ | __/ /___/ /_/ \ \
. / / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \ \
 ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄
3:デフォルトの名無しさん
08/03/30 01:59:08
し、死んでる・・・
4:デフォルトの名無しさん
08/03/30 02:01:37
(・ω・`)乙 ←ポニーテール
5:デフォルトの名無しさん
08/03/30 03:00:43
正直、番号なんてどうでもいいよな。
6:デフォルトの名無しさん
08/03/30 03:20:29
Ver+=9になっとるがな。
7:デフォルトの名無しさん
08/03/30 03:27:06
>>1
乙
GUIアプリ作りたいけど……中々そこまで勉強が進まない。
delphiとかrubyの方がいいんでしょうかな。
8:デフォルトの名無しさん
08/03/30 03:35:17
>>1
乙だけど次は54くらいに戻そうぜ もしくは60-6あたりで。
>>7
楽にやるならGUIでrubyは無い気がするが…
delphiは少し古くなってきているのでC#あたりがおすすめ
9:デフォルトの名無しさん
08/03/30 09:15:28
08/02/05-08/02/20
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
スレリンク(tech板)
08/02/20-08/02/27
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
スレリンク(tech板)
08/02/28-08/03/14
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
スレリンク(tech板)
08/03/14(3レスのみで終了)
【初心者歓迎】C/C++室 Ver.51【環境依存OK】
スレリンク(tech板)
08/02/28,08/03/14-08/03/30
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
スレリンク(tech板)
スレッド移行としてはこんな流れみたいなので、前スレが Ver.51相当、今スレは Ver.52 相当と見なせば良さそうだけどね。
10:1
08/03/30 09:29:03
ごめん、こんなに大変なことになるとは…
軽い気持ちで59にしてしまったばかりに、、、、
俺がこのスレの最後にまた出てきて責任をもって次はVer 53を立てろと言うよ。
11:デフォルトの名無しさん
08/03/30 10:38:16
大丈夫。バージョンなんてただの飾りです。
12:デフォルトの名無しさん
08/03/30 10:53:17
大変なことにはなってないから、気にすんなw
13:デフォルトの名無しさん
08/03/30 12:09:59
もしくは59にたどり着くまで保守してくれればおkwww
14:デフォルトの名無しさん
08/03/30 14:18:20
>>8
thx。そうか、delphiは古いか。
やっぱスタジオゲットしたほうがいいな。
15:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/30 16:36:17
tってなんだよ
17:デフォルトの名無しさん
08/03/30 16:39:55
いきなり答えを出していいのか。
前置インクリメントは普通に定義した上で、
こういう風に前置インクリメントを使う後置インクリメント演算子関数をクラスのメンバとして作る。
無理にメンバにする必要もないけど。
Counter operator ++(int)
{
Counter x = *this;
++*this;
return x;
}
18:デフォルトの名無しさん
08/03/30 16:58:27
>>16
いや引数をどうにかしようとおもって、後置で0が入れられるなら、前置は何も入らない!とおもってやった名残です
つまり消し忘れなのです
>>17
*thisの++がoperator++()ということですかなるほど
実行できました
ありがとうございました
19:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/03/30 17:26:25
>>20
ありがとうございます。
実は実際のソースでは、2次元配列はクラスのprivate static const なメンバ変数なのですが
クラスの外からアクセサを使ってアクセスしたいのです。
その場合の記述も上記のようなものになるのでしょうか。
22:デフォルトの名無しさん
08/03/30 17:28:01
だったら参照でいいんでない?
23:19
08/03/30 17:48:38
>>22
すいません。2次元配列への参照を戻す関数の宣言は
どのように書けばいいでしょうか?
24:デフォルトの名無しさん
08/03/30 17:49:30
こんばんは。今月、C++を始めたばかりの初心者です。
お勧めの入門書・参考書があれば教えてください。
25:デフォルトの名無しさん
08/03/30 18:20:55
>>23
const int (& getArray())[5][5] const {...; return ary;}
const int (& a)[5][5] = ....getArray();
26:デフォルトの名無しさん
08/03/30 18:21:16
>>24
初心者スレか書籍スレへ。
27:19
08/03/30 18:32:02
>>25
ありがとうございます。
ややこしいですね・・・
28:デフォルトの名無しさん
08/03/30 18:34:43
>>24
ないのでお帰りください。
29:デフォルトの名無しさん
08/03/30 18:41:35
>>24
Cが理解出来ればC++は根性で分かる
クラス、派生、オーバーライド、演算子のオーバーライドとかね。
あんなもん構造体のラッパー
STL、テンプレートは知らんでも何とかなる
C++勉強中に.NetのC++をmanagedでやると
永遠に理解出来なくなると思われ。
30:デフォルトの名無しさん
08/03/30 18:52:45
>>29 こいつ初心者だな・・・
31:デフォルトの名無しさん
08/03/30 19:01:37
>>30
・・・まじ???
自称「C++得意です」なんですけど…
32:デフォルトの名無しさん
08/03/30 19:15:44
テンプレート自分で書くかはともかく、STL使わないC++ってもはや全く想像できないなぁ。
まあ、俺もCから移った直後は>>29みたいなノリだったんだけどね。
「STL? なにそれおいしいの?」「テンプレート? つかわねーよhahaha!!」って。
33:デフォルトの名無しさん
08/03/30 19:17:07
STLとtemplateがないC++なんぞ使いたくない
34:19
08/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:デフォルトの名無しさん
08/03/30 19:23:11
>>34
constの位置が違う。
virtual const int (& getMap() const)[1000][1000] = 0;
36:デフォルトの名無しさん
08/03/30 19:28:29
typedef使ったりboost::multiarray使ったほうが可読性が高まると思うが
37:19
08/03/30 19:29:05
>> 35
うまくいきました。ありがとうございます。
ただ配列の大きさも同じでないとオーバーライドできないのですね。
38:19
08/03/30 19:31:08
>>36
boostはまだ知らないのですが、typedefはそうですね。
こういう時にこそ、使うべきですよね。勉強になります。
39:デフォルトの名無しさん
08/03/30 19:31:43
自分は趣味でやってるだけだけどCで書こうとするとSTLないから倍の時間がかかるよ。
C使いこなせる人尊敬するわ
40:デフォルトの名無しさん
08/03/30 19:34:11
CとC++の中で最も優先して勉強するのはSTLと思う
41:デフォルトの名無しさん
08/03/30 19:37:08
>>37
配列型は要素数が違えば別の型。
型が違えばオーバーライドにならない。
戻り型と違う型はreturnできない。
なんだか難儀しそうだね。
42:デフォルトの名無しさん
08/03/30 19:39:30
34なんて全然分からんw強引にキャストする所だったw
配列はついついポインタにキャストするからなぁ
>>39
Cだとクラス間の上下関係無いから、いつでもどこでも呼び出せて楽じゃない?
メンバにstaticつけた瞬間に敗北した気がする。
classやらの基本構文書いて15分、とかイライラする。
Cならいきなり呼び出せるのに、て思うとね〜
というか、Cから入ってC++使う機会が少なかったから
脳内でクラス構造が上手に作れないらしいw
STLよりANSIライブラリの方が手軽で使い易いし覚え易いし・・・
43:デフォルトの名無しさん
08/03/30 20:08:44
>>42
ウン百万行ってソースを担当すりゃわかるようになる。
>いつでもどこでも呼び出せて楽
楽だからスパゲッティーが生まれやすくなる。
44:デフォルトの名無しさん
08/03/30 20:17:50
そうだな。設計とは制限することだと言うし。
45:デフォルトの名無しさん
08/03/30 20:26:15
厳密にアクセスの流れを制限することが売りというか
オブジェクト指向のキモというか
従来どおりにやろうとするなら単なるオーバーヘッドの増加でしかないようなw
46:デフォルトの名無しさん
08/03/30 20:27:16
まぁ趣味でやる程度の規模ならCでも全然問題ない気がする
47:デフォルトの名無しさん
08/03/30 20:30:07
29=42は超初心者
48:デフォルトの名無しさん
08/03/30 20:39:37
string("hagehage");
って、Cスタイルキャストですか?コンストラクタ呼んだことになってますか?
49:デフォルトの名無しさん
08/03/30 20:41:57
>>42
いつでもどこでも呼び出せるようにして、良いんじゃない?
俺は良いと思うよ。STLは使うことを進めるけど。
オブジェクト指向もC++で扱えるパラダイムの一つに過ぎないからね。
ラムダ万歳。
50:デフォルトの名無しさん
08/03/30 20:42:48
>>48
コンストラクタ。
51:デフォルトの名無しさん
08/03/30 20:47:59
>>50
ありがとうございます。
いままで
static_cast<string>("hagehage");
って書いてたんですが、今度から>>48ですませることにします。
52:デフォルトの名無しさん
08/03/30 20:59:35
>>51
状況によるだろうけど、それ書く機会少なくない?
明示しなくても変換(コンストラクタが選択)されるよ。
void f(const std::string& s);
f("aaa"); //OK
std::string s = "aaa"; //OK
53:25
08/03/30 21:03:40
>>19
ゴメン、constの付け所を間違えた。
やはりあれだな、>20が真実を語っていたな。
54:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/30 21:19:20
>>54
Mapが定義されて無いんじゃね?
>>55
それならおk。
57:デフォルトの名無しさん
08/03/30 21:26:00
>>55
見逃してた。stringへの+も明示する必要ないから
string("\n") は "\n" だけで良いよ。
str = string() + "my name is" + name + "\n";
でもおk。
58:デフォルトの名無しさん
08/03/30 21:27:50
>>56
ありがとうございます。解決しました。
確かにMapがおかしかったです。
原因はMapで純粋仮想関数ではなく、ただの仮想関数を宣言していただけなのに
その定義を持っていなかったことでした。
59:デフォルトの名無しさん
08/03/30 21:36:52
>>57
>str = string() + "my name is" + name + "\n";
わーお(`・ω・´)いろいろありがとうございます。
60:超初心者29=42
08/03/30 21:39:35
>>43
ン百万行・・・
いいとこ10万行ぐらいだな、触ってたのは
ン百万のソースを触るなんてオープン系の人?(´・ω・`)??
PCアプリでン百万行たって、
モジュール化進んでるからン百万だろうが怖くないしな
名前空間なんかイラネの世界で生きて来たからな〜w
Cだとヘッダ単位でモジュール化したりするモンだが。。
規模が違うんだろうな〜〜。。。。
61:デフォルトの名無しさん
08/03/30 21:45:24
モジュール化?なにそれ?なスパゲッティコードを君にプレゼントしよう
62:デフォルトの名無しさん
08/03/30 21:49:29
規模が大きくなってくると、人員の質にバラ付きがでてくるのさ
63:54
08/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
08/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:デフォルトの名無しさん
08/03/30 21:52:20
>>60
同じ同じ。
言語のサポートが優位な点だけど、
大枠でのプログラム層なアーキテクチャはC,C++で左右されないと思うよ。
66:デフォルトの名無しさん
08/03/30 22:01:25
>>54
>型指定子がありません - int と仮定しました
コンパイラ:「const Map」がよく分からないので、「const int Map」だと考えますね
>',' が '&' の前にありません
コンパイラ:「const int Map&」、なんか変数名のあとに「&」が出て来たんですけど
67:66
08/03/30 22:04:46
一応補足。
2つ目のエラーは、1つ目の仮定のせいで発生してるってことね。
68:29=42超初心者
08/03/30 22:07:33
>>66
Map ってクラスが入れ子になってるからじゃないの?
ヘッダの相互参照になってる
enemy.h の頭に
class Map;
ての入れてコンパイル通らない?
もしくは cpp 内のみにヘッダ参照宣言入れて、ヘッダ内からの include
やめるとか
MS VC ならエラー行間違えない筈なんだけどな
すげー適当に答えてるけどw
>>61
>>62
共同作業でのプログラミング経験ほとんど無いんで〜
他人の綺麗なコードをスパゲティにした事なら何度もあります。未だバレてませんヨ、HAHAHA
69:54
08/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:デフォルトの名無しさん
08/03/30 22:28:30
class A{
B b;
};
class B{
A a;
};
要はこれと同じ状態。前方宣言でも回避できない。これも
class A{
A a;
};
という問題に帰着できるから分かるだろ
71:29=42超初心者
08/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:デフォルトの名無しさん
08/03/30 22:32:45
ゲームのように扱うデータが多かったりすると
必然的にコード量は増えるし、オブジェクト指向も取り入れるんだろう。
制御屋だとシステムの大きさに比例してでかくなるけど
担当も細分化されて、一人で担当するところはそれほどでもないね。
安全に関わるから。
73:29=42超初心者
08/03/30 22:40:43
>>72
エミュレータ使ってもバグ取れないなんてザラだからねぇ・・・
ブレークポイント張りずらいし
組込み系だとC++コンパイラが無いこと多い
ミドルウェアでC以外のもの見た事ないし。
linuxのほとんどのコアソースがCでなのも傍証してる(ソースが古いのも一因)
gccだけはブレークかけても、どこがバグなのかさっぱり分からん(´・ω・`;;;)
モジュール化の概念はドコ行っても同じかも
74:デフォルトの名無しさん
08/03/30 22:42:58
最近は組み込みもC++にシフトしてるよ
例外とかメモリ確保とか制限は多いけど
75:54
08/03/30 22:43:31
>>70, 71
一応上のエラーは,これも class MoveStrategy; を追加することで消えました。
有益な情報ありがとうございます。
この問題に関して不案内なところがあるので、もう少し勉強してみます。
76:デフォルトの名無しさん
08/03/30 22:51:40
>C++コンパイラが無いこと
そこでcfrontですよ
77:デフォルトの名無しさん
08/03/30 23:06:52
日立のやつはC++使えるよね
PCみたいにはいかないけど。
78:デフォルトの名無しさん
08/03/30 23:17:00
組込みでmallocに頼るのがどうも・・・
1週間後にフリーズ>再起動したら直りました、で
原因がmallocじゃどうにもならないしな〜。
RAMの必要量が予想出来ないしなぁ。。。
C++の展開命令見ると何書いてあるか分からないしなぁ
Cならまだしも。
79:デフォルトの名無しさん
08/03/30 23:49:40
Templateの諸機能が動的に実装してある
80:デフォルトの名無しさん
08/03/31 06:05:05
すみません。質問させて下さい。XP+VC++ 9.0です
【やりたいこと】 データファイルを読み込んで、ダイクストラ法を使って最短ルートを求める
【条件】
ノードは可変数個、コストは全て正の値、スタートノード及びゴールノードは
dijkstra.exe -start_node -goal_node のようにプログラム開始時に与える。
【何が分からないのか】
可変数個のノードや、エッジがどのノードに向かって延びているか、
かかるコストはいくらか等のデータをどのようにデータファイルに格納するか、データファイルの構造決定。
データファイルの構造が決定したとして、どのように可変数個のデータを読み込むか、
どうやってデータの終わりを探すか。ファイルからデータを読み込んだとして、データの整合性を
どのように検証するか。
分からないことばかりですが、誰かヒントだけでも教えて下さい。宜しくお願いします。
81:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/31 06:37:54
>>80
可変個のデータ読み込みは、非常に基礎的で、ダイクストラ法と関係ないですよ
それをまず出来るようになって下さい
83:デフォルトの名無しさん
08/03/31 06:38:58
>>80
C++でも良いんですか? もし良ければSTLを使ってノードを管理すると簡単と思います
84:デフォルトの名無しさん
08/03/31 06:57:59
>>82-83
レスありがとうございます。私の修行が足りないようで、お恥ずかしい限りです。
勉強して理解を深めてからもう一度出直してきます。スレ汚してすみませんでした。
85:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/31 11:32:42
getchar();
return 0;
88:デフォルトの名無しさん
08/03/31 11:41:03
>>87
ありがとうございます!ようやく確認できるようになりました。
キーボード入力待機状態にして止めるんですね。
勉強になりました。
89:デフォルトの名無しさん
08/03/31 11:41:05
Ctrl + F5
90:デフォルトの名無しさん
08/03/31 11:45:24
>>89
デバッグなしでビルドというのでも止まるんですね。
ありがとうございます。
C言語はいろいろ解らないことばかりで非常に助かります。
91:デフォルトの名無しさん
08/03/31 11:48:00
>>86
コマンドプロンプトで実行するか、>>87
92:デフォルトの名無しさん
08/03/31 12:04:44
>>90
それらはCの知識ではない。Windowsの使い方の知識とVisualStudioの使い方の知識だ。
93:デフォルトの名無しさん
08/03/31 12:36:21
>>84
Boostのグラフライブラリを使う
94:デフォルトの名無しさん
08/03/31 14:10:05
URLリンク(builder.japan.zdnet.com)
ポインタの勉強をしているのですがサンプルのコードを動かしてみたところうまくいきません
95:デフォルトの名無しさん
08/03/31 14:13:24
もうアパートを探すのはつかれたよ。
はやくプログラミングしたいよ。
96:デフォルトの名無しさん
08/03/31 14:20:17
>>94
コメント欄がすごいことにw
97:デフォルトの名無しさん
08/03/31 14:23:25
>>94
もうこの人終わりだなw
98:デフォルトの名無しさん
08/03/31 14:28:30
int *n;
*n = 5; /* ポインタ変数nに値5を代入 */
初期化もポイントする先も決めてないポインタをそのまま使うのって非常に不味いよねぇ
自分ははじめにポインタの初期化を必ずするよう教わったがなぁ
99:デフォルトの名無しさん
08/03/31 14:40:39
>>96>>97
あー、前スレで話題になった奴か。
エピステーメーにまで指摘されていたのに未だに記事の修正が入らないのね。
編集がコメントなにやらゴミを書いているけどそんなものは記事の修正とは認められないし。
この程度のコメントじゃZDNETとしても著者としても痛くも痒くもないのでしょ。
100:デフォルトの名無しさん
08/03/31 14:46:23
>>99
もしや本人さま(えぴさん)で?
101:デフォルトの名無しさん
08/03/31 14:48:48
どうなるか、サンプルソースをコンパイルして実行してみたら思った通り以上終了w
フォールト ->00401007 c70005000000 mov dword ptr [eax],0x5 ds:0023:00000001=????????
だってさ。
*n = 5: の部分かな。エラーがソース乗せちゃまずいでしょw
102:デフォルトの名無しさん
08/03/31 14:49:42
× エラーがソース乗せちゃまずいでしょw
○ エラーがでるソース乗せちゃまずいでしょw
103:デフォルトの名無しさん
08/03/31 14:54:00
>>101
コンパイラにもよるんじゃね?
いや、試してないけど
104:デフォルトの名無しさん
08/03/31 14:55:06
見てないけどエラーを修正しなさいって問題なんだろ
105:デフォルトの名無しさん
08/03/31 14:56:59
あんまり往生際悪いんで吹いたww
106:デフォルトの名無しさん
08/03/31 14:57:20
「動くけど危険」とかいう話じゃなくて「動かない」コードだろ、これは
107:デフォルトの名無しさん
08/03/31 14:59:25
>>101
必ずしも 異常 終了するとは限らない
ポインタの指す先による
>>106
場合によっては動くコード
108:デフォルトの名無しさん
08/03/31 15:03:01
最適化をオフにして次のコードを実行すると…
勘弁してほしいタイプのバグ
#include<stdio.h>
void hoge(void){
static int a=5;
int *n=&a;
printf("a=%d\n", a);
}
void huga(void){
int *n;
*n=100;
}
int main(void){
hoge();
huga();
hoge();
return 0;
}
109:99
08/03/31 15:13:55
>>101
落ち着け。「以上終了」になっているぞw
>>100
勘弁してくれ。一緒にされたらそれはそれで迷惑だ。
もし私がエピたんなら、自分のブログでネタにしているよ。
いや、それだと本人が書いていたら拙いな。
……と思って検索したら、やっぱり書いていたかw
で、ついでにうろついたらまぁ、他にも釣れた罠。
110:デフォルトの名無しさん
08/03/31 15:21:40
επιστημηってプログラム系の掲示板でよく見かけるけどなんの人なの?
111:デフォルトの名無しさん
08/03/31 15:30:11
掲示板でよく見かけるヤツは偽者
自称C++のちょっと偉い人
112:デフォルトの名無しさん
08/03/31 15:31:34
C++の黎明期からC++に関わってきた人。
かといって、C++の隅から隅まで知っているわけではなくて、
Boostのコミッタというわけでもなくて、
意外に中途半端な立ち位置な気がするお人。
でも、俺より知識も経験もあるのは確実。
113:デフォルトの名無しさん
08/03/31 15:32:34
魚拓とっておこうと思ったら既に3つも取られてたw
114:デフォルトの名無しさん
08/03/31 15:33:23
エイプリルフールは明日だ
115:デフォルトの名無しさん
08/03/31 15:36:26
なんか冒頭に追記が
> 現在、本稿には技術的観点から異議が多数寄せられているため、詳細をレビュー中です。
> 初めてご覧になる方は、コメント欄もあわせてお読み下さい。
> また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。
そんな大層なレベルの話なのか…?
116:デフォルトの名無しさん
08/03/31 15:39:40
>現在、本稿には技術的な誤りが存在するため、詳細をレビュー中です。
>初めてご覧になる方は、コメント欄もあわせてお読み下さい。
>また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。
厳しくなったw
117:デフォルトの名無しさん
08/03/31 15:44:52
初心者にとってポインタの概念ってそんなに躓きやすい物なのか?
ポインタの基本的な部分で苦労したことがないのでそこら辺が不思議だ
118:デフォルトの名無しさん
08/03/31 15:45:30
>>94
おい。間違えて「記事推薦者になる」ってとこクリックしちまったぞ。
どうやって取り消すんだ。おい。教えろ。
119:デフォルトの名無しさん
08/03/31 15:50:36
>>117
昔教える立場にあったことがあるが、何でかしらんが分かる奴と分からん奴がいて、
分からん奴はいくら教えてもなかなか理解してくれん。
メモリってのがリニアな空間で位置や距離の概念があることを理解できないらしい。
120:デフォルトの名無しさん
08/03/31 15:55:35
番地とか分かりやすいものに例えればいいんじゃね?
121:デフォルトの名無しさん
08/03/31 15:56:25
>>118
ワロヌ
122:デフォルトの名無しさん
08/03/31 16:00:32
>>117
俺もそうだけど、アセンブラから入ると、「ポインタが分からない」と言う人がどう分からないのか分からない
新人に教えるときなんかにとても苦労する
123:デフォルトの名無しさん
08/03/31 16:07:17
変数:戸棚
値:ケーキ
ポインタ:「戸棚にケーキがあります」という母ちゃんの置き手紙
124:デフォルトの名無しさん
08/03/31 16:09:03
>>123
訳わからんw
125:デフォルトの名無しさん
08/03/31 16:17:56
>>123
戸棚の場所が書いてあるメモ、なんじゃね?
126:デフォルトの名無しさん
08/03/31 16:25:27
変数: 箱や器のようなもの
値: 箱にいれる何か
ポインタ: 箱が置いてある場所を書いてあるメモ
みたいな解釈でいいんだろうか?
ポインタを正しく理解できてるか自分でもよくわからん。
127:デフォルトの名無しさん
08/03/31 16:25:38
ケーキを食った後置き手紙を始末しないと後の人が迷惑するという話か
128:99
08/03/31 16:31:08
いや、置き手紙はそのままで戸棚に「中身は俺の腹の中」って書いておくんだろ。
129:デフォルトの名無しさん
08/03/31 16:38:46
JAVAの本を書いている人みたいだけど、
これほどポインタの概念がわかってなくても
使えるのか、JAVAって。
ある意味うらやましいかも。
130:デフォルトの名無しさん
08/03/31 16:45:21
>>128
そして後から置き手紙を読んだワカメが大激怒
131:デフォルトの名無しさん
08/03/31 16:45:51
>>129
でも、ポインタも理解できないような人が書いたJavaのコードって、やっぱりどこか危なげなんじゃないかね
132:デフォルトの名無しさん
08/03/31 16:47:44
>>130
Access Violationのメッセージボックスのアイコンに、ワカメの顔が表示されるとこ想像した。
133:デフォルトの名無しさん
08/03/31 16:52:23
>>129
それらの本も、もしかすると同じようにでたらめな知識に基づいて書いてるんじゃないかと疑わざるを得ない気がする。
134:デフォルトの名無しさん
08/03/31 17:06:45
>>131
参照がBoostのスマートポインタと同じようなもので
理解できない人は怪しいコードいっぱい書くことに
135:デフォルトの名無しさん
08/03/31 17:11:39
(Javaの)参照がBoostのスマートポインタと同じようなものってこと?
なんで*Boostの*って制限を設けるか理解しかねるけど、
Javaの参照はポインタそのものと同じようなもので、
それに加えて参照されなくなってからは回収される可能性があるだけ。
C++でのスマートポインタはローカルに限れば基本的にスコープを抜けた時点で回収されるから、
JavaのGCとは少し違う。
136:デフォルトの名無しさん
08/03/31 17:17:49
自分の知らないところでチョコチョコされる行動まで把握しないといけないのは面倒だが
かといって自分で何もかも把握して処理するのも面倒
なかなかバランスが難しいのねぇ
137:デフォルトの名無しさん
08/03/31 17:20:59
個人的にはRAIIは気に入ってるというか、いい方法だと思うんだけどなぁ。
もっとC++成分を取り入れたJavaライクな言語とかあればうれしいんだけど。
138:デフォルトの名無しさん
08/03/31 18:07:30
それならDを試してみてはどうだろう。
139:デフォルトの名無しさん
08/03/31 19:35:48
Dは頭の悪そうな言語名だから使いたくない。
140:デフォルトの名無しさん
08/03/31 19:38:06
頭の悪い人程そういうことを気にするもんだな。
141:デフォルトの名無しさん
08/03/31 19:39:18
予想通りのレスだな。
142:デフォルトの名無しさん
08/03/31 19:44:39
>>139
豆腐屋っぽいよね
143:デフォルトの名無しさん
08/03/31 19:47:25
D は使って欲しかったらまず言語仕様を安定させて欲しい。
144:デフォルトの名無しさん
08/03/31 19:51:40
python + cpp + java = D (という予定)
145:デフォルトの名無しさん
08/03/31 20:04:37
C++にもっさり毛が生えたのがD
146:デフォルトの名無しさん
08/03/31 20:11:27
D1.0は仕様確定したよ。
147:デフォルトの名無しさん
08/03/31 20:13:03
2.0 へ移行することになったときに
仕様が違いすぎて大変なので面倒くさい。
148:デフォルトの名無しさん
08/03/31 21:44:25
>>126
違うよ。
値は数値とか文字列とかの事で、変数は値につける名札で、ポインタは値がアドレスの変数の事だよ。
149:デフォルトの名無しさん
08/03/31 22:37:22
>>148
エロ本が変数で、収録されてる写真が値
ポインタはエロ本という変数で(便宜上*がついてる、というかポインタであることの証)、そのポインタの値はページ数
ってな理解でいいの?
150:デフォルトの名無しさん
08/03/31 22:52:48
エロ本は型で、デラベッピンが変数じゃね
151:デフォルトの名無しさん
08/03/31 23:07:50
デラベッピンはエロ本の派生クラスだ。
152:デフォルトの名無しさん
08/03/31 23:08:45
エロ本が概念でデラベッピンが型だろう
153:デフォルトの名無しさん
08/03/31 23:12:31
確かに
154:デフォルトの名無しさん
08/04/01 00:20:55
お前らw
155:デフォルトの名無しさん
08/04/01 00:25:05
よりによってでらべっぴんを用いるところに何らかの意図を感じる
156:デフォルトの名無しさん
08/04/01 01:34:06
エロ本としてではなく美術書として扱う場合、これは派生なの?
157:デフォルトの名無しさん
08/04/01 01:56:47
それは扱う側が決めることだろ
どう使われようがしったこっちゃない
158:デフォルトの名無しさん
08/04/01 08:09:08
>>156
インターフェースとして定義したクラスを継承
159:デフォルトの名無しさん
08/04/01 08:51:50
>>149
>エロ本が変数で、収録されてる写真が値
この解釈だとエロ本はunionの配列で、ページ数は配列のindex。
160:デフォルトの名無しさん
08/04/01 08:52:39
C/C++のポインタの機能--参照渡しのような処理 - builder by ZDNet Japan
URLリンク(builder.japan.zdnet.com)
このサイトのドコがおかしいのでしょうか?
161:デフォルトの名無しさん
08/04/01 09:02:23
本人?
コメント欄の通り
162:デフォルトの名無しさん
08/04/01 09:50:07
それは4/1のために用意された記事だからあまり真に受けないほうがいい。
163:デフォルトの名無しさん
08/04/01 10:54:05
>>160
>このサイトのドコがおかしいのでしょうか?
殆ど全て。
164:デフォルトの名無しさん
08/04/01 11:53:26
サイトってw
普通に「記事」とか言えよ
安っぽい釣り針だな
165:デフォルトの名無しさん
08/04/01 11:56:11
碌に査読もせずにほいほい載せちゃうようなサイトだからな。何かおかしいだろ。
166:デフォルトの名無しさん
08/04/01 12:36:03
嘘を嘘と
167:デフォルトの名無しさん
08/04/01 12:56:31
編集がコメントで悪足掻きしたり、著者の有り得ないコメントを代理掲載しているくらいだからね。
168:デフォルトの名無しさん
08/04/01 15:17:06
記事のサブタイトルが「変数の場所(アドレス)」に変わったw
169:デフォルトの名無しさん
08/04/01 15:20:55
推薦増えすぎw
170:いっそ誰か転載してくれw
08/04/01 15:26:22
一ページ目は修正掛かったようだけど、日本語が破綻している。
>ポインタ変数を定義するには、通常の型の場合とは異なり、型名の後ろに * がつけられる。
よくあるダメドキュメントのパターンである、主語と述語の関係が狂ってしまっている。
この文章は誰の手によるものだろうか。筆者? 編集? レビュアー?
いっそ企画から遣り直しては如何だろうか。
171:デフォルトの名無しさん
08/04/01 16:03:48
俺が筆者ならしばらくは人には会いたくないだろうなw
はずかしすぐるwww
172:デフォルトの名無しさん
08/04/01 16:21:59
「builder編集部 冨田」って人も大変だな。
しかし、事前の校正をしなかった報いだ。
この冨田って人が担当だったかどうかは知らんが。
builderの信頼性も、これで地に落ちたな(あったかどうかは不明だが)。
173:デフォルトの名無しさん
08/04/01 16:24:12
しかし、たったこれだけのコードの校正も出来ないってどれだけ不注意なんだ
174:デフォルトの名無しさん
08/04/01 16:35:58
プロのテクニカルライターだから信用してたんでしょ
175:デフォルトの名無しさん
08/04/01 16:37:49
かわうそうだからもうそっとしといてあげようよ
176:デフォルトの名無しさん
08/04/01 16:38:03
この連載、続くのか、打ち切りになるのか・・・
177:デフォルトの名無しさん
08/04/01 16:39:01
>>175
バンブーブレードのアニメを思い出したw
178:デフォルトの名無しさん
08/04/01 16:40:54
前橋さんに書いて欲しい
179:デフォルトの名無しさん
08/04/01 16:41:47
え、連載なの?
180:デフォルトの名無しさん
08/04/01 17:10:38
>>164
スミマセン『記事』でしたね。でもCあまり判らないので。。。
181:デフォルトの名無しさん
08/04/01 17:11:33
URLリンク(builder.japan.zdnet.com)
特集だな。
>>180
それはC言語の問題じゃないだろ。
日本語やり直せ。
182:いっそ誰か転載してくれw
08/04/01 17:26:55
問題は件のページだけではない。
こちらのページから引用してみよう。
URLリンク(builder.japan.zdnet.com)
--
データを区切る文字を空白などではないものにする方法だ。たとえば”%s,%s”とすれば、”abc def,ghi”を”abc def”と”ghi”という2つの値として入力することができる。
--
これも、実験してみれば直ぐに判るが出鱈目である。
一体全体、この特集はどんな技術者を作ろうと言うのだろうかw
183:デフォルトの名無しさん
08/04/01 17:44:37
何の話かと思ったら、scanf()か
184:デフォルトの名無しさん
08/04/01 17:46:36
>>182
scanfで入力制限が出来ることを知らなかったorz
185:デフォルトの名無しさん
08/04/01 18:02:09
>>184
普通は、scanf()では使いにくいから、入力制限はsscanf()で使うんだけどね。
所謂入門書でその辺りにきちんと触れているものは、知る限りないね。
186:デフォルトの名無しさん
08/04/01 18:07:30
>>182 確かに酷いな
187:デフォルトの名無しさん
08/04/01 18:11:27
URLリンク(builder.japan.zdnet.com)
推薦の数が飛び抜けているな
188:デフォルトの名無しさん
08/04/01 20:53:23
件の人の(URLリンク(builder.japan.zdnet.com))
>また、doubleからはlong double(12バイト分)を派生させることができるが、
>floatではそれができないという違いがある。
ってどういう意味なんでしょうか?
189:デフォルトの名無しさん
08/04/01 20:58:36
long float
という型が無い事を言いたかったんじゃね?
日本語でおkな記事だな
こんなん初心者に読ませても害にしかならないな
190:デフォルトの名無しさん
08/04/01 21:01:05
おれ、今までlong doubleって10バイトって思ってたよ。
191:デフォルトの名無しさん
08/04/01 21:15:41
>>189 なるほど。
192:デフォルトの名無しさん
08/04/01 21:19:08
long double が 12 バイトの環境は見た事無いなあ。
10 か 16 ならあるが。
193:デフォルトの名無しさん
08/04/01 21:22:48
sizeof(long double)
12bytes gcc (MinGW)
10bytes Borland C++ Compiler
194:デフォルトの名無しさん
08/04/01 21:23:28
普通の gcc だと 16 だな。
195:デフォルトの名無しさん
08/04/01 21:34:38
仕方ない、取り敢えず特集の全ての記事にダメ出ししてくるか。
これだけ頓珍漢な記事だらけならパーフェクトも狙えるだろw
196:デフォルトの名無しさん
08/04/01 21:36:46
>>182
これ何か不味いのか?
197:デフォルトの名無しさん
08/04/01 21:47:56
>>196
#include <stdio.h>
int main() {
char a[10], b[10];
switch(sscanf("abc def,ghi", "%s,%s", a, b)) {
case 2:
puts("a, bともに読み込めた。");
puts(a);puts(b);
break;
case 1:
puts("aだけ読み込めた。");
puts(a);
break;
case 0:
puts("aもbも読み込めなかった。");
break;
case EOF:
puts("エラー");
}
return 0;
}
どうなるとおもう?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4043日前に更新/246 KB
担当:undef