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 ) ./___∧::::::く⑨\:::::::/|-‐'"
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;
}
どうなるとおもう?
198:デフォルトの名無しさん
08/04/01 21:54:06
上と下ではどっちが速いですか?
bool rb = m_map.insert(std::make_pair(key, value)).second;
if(rb)
{
ほげほげ;
}
if(m_map.insert(std::make_pair(key, value)).second)
{
ほげほげ;
}
199:デフォルトの名無しさん
08/04/01 21:55:14
いっしょだろ。
200:デフォルトの名無しさん
08/04/01 21:56:23
変数にコピーする分上が遅い。
201:デフォルトの名無しさん
08/04/01 21:58:21
>>197
aだけ成功
スペースの後が終端文字列になってた
202:デフォルトの名無しさん
08/04/01 21:58:43
>>200
その程度なら最適化で消えることが期待できる。
>>198
実測重要。
203:デフォルトの名無しさん
08/04/01 22:00:30
下はスタックポインタの変動が一回多くなるので、極々僅かに遅くなる気も?
204:デフォルトの名無しさん
08/04/01 22:00:55
. 人
( )
, '´ ̄ `ヽ
/ ( ( 人人) ) 最適化すれば消えるのではないかと
|人| '_'|ノ ふじおかが言っている。
ノノ| |o○_⌒_○
( エ )
. o( )o
uu
205:デフォルトの名無しさん
08/04/01 22:05:51
>>193 でもMinGWだとこれが?→ unsigned int 0以上の整数 (0から65535)
206:デフォルトの名無しさん
08/04/01 22:15:46
if(!banana)と、書くのが気持ち悪いのですが、
if(true != banana)と、書くとスピードが落ちますか?
207:デフォルトの名無しさん
08/04/01 22:21:01
if(banana == flase)じゃないのが気持ち悪いな
208:デフォルトの名無しさん
08/04/01 22:21:46
うお 間違えたw
209:デフォルトの名無しさん
08/04/01 22:24:30
>>205
どういう意味でしょう?
MinGW でも unsigned int は 0~4294967295 の範囲です
210:デフォルトの名無しさん
08/04/01 22:32:28
>>206
とりあえず>>207に直したとして、まず変わらん。
むしろ変わる環境があったらちょっと興味がわく。
で、速度は実測が基本。一応ね。
211:デフォルトの名無しさん
08/04/01 22:46:02
trueと比較するのは(速度は兎も角)確実に1ステップ無駄な処理が入る。
212:デフォルトの名無しさん
08/04/01 22:47:05
うそーん
213:デフォルトの名無しさん
08/04/01 22:56:11
>if(!banana)
と、
>if(true != banana)
コードの意味合いが異なる
214:デフォルトの名無しさん
08/04/01 22:58:32
>>209 >>188の記事からの引用です
215:デフォルトの名無しさん
08/04/01 23:05:34
class hoge
{
hoge(){←エラー
rcdefault.top = 0;
rcdefault.left = 0;
rcdefault.buttom = 480;
rcdefault.right = 640;
}
static const RECT rcdefault;
}
性的で固定な構造体の中身はどうやって指定するの?
216:デフォルトの名無しさん
08/04/01 23:10:47
ピコエロス
217:デフォルトの名無しさん
08/04/01 23:19:11
class HOge{
static const A a;
};
const RECT HOge::a = {1,2,3,4};
218:デフォルトの名無しさん
08/04/01 23:27:05
URLリンク(builder.japan.zdnet.com)
--
本来の名称は1文字のCなのだが、それだけだと分かりにくいからか、一般的にはC言語という。
--
# C言語と表記することが多いと認めるのは吝かではないが、果たして開発現場でC言語と呼ぶ輩はどれほどいるのだろうか。
--
子孫にあたるプログラム言語には、同じくオブジェクト指向が取り入れられているJavaなどがある。
--
# いつからJavaはCの子孫になったんだ?
URLリンク(builder.japan.zdnet.com)
--
しかし、前述の通り携帯電話などの機器の動作はC/C++で開発されたプログラムによって行われている。
--
# そうなんですか? 本当に?
URLリンク(builder.japan.zdnet.com)
--
floatよりもdoubleのほうが扱える数値の範囲が広くなる。そのため、floatよりもdoubleのほうが精密な値を表すことが可能になる。
--
# 「そのため」ではありません。無茶を言わんでください。
URLリンク(builder.japan.zdnet.com)
--
printf( "|%5.3f %-9.4f|", 12.34, 56.789 ); /* |12.340 56.7890 | */
--
# わざわざ初心者を混乱させなくてもいいでしょう。素直に%6.3fとしては如何?
219:デフォルトの名無しさん
08/04/01 23:36:51
さすがに重隅ウザイ
220:デフォルトの名無しさん
08/04/01 23:37:35
できました。
221:デフォルトの名無しさん
08/04/01 23:40:22
>>218
ここに書くと筆者が見てくれるの?
222:デフォルトの名無しさん
08/04/01 23:43:52
>>220
who?
223:デフォルトの名無しさん
08/04/01 23:46:47
規格内に C 言語って記述がいくらでもあるのに・・・。
224:デフォルトの名無しさん
08/04/01 23:51:37
The Programming Language C
225:デフォルトの名無しさん
08/04/01 23:54:05
今マルチスレッドで裏で画像読み込みとかやってるんですが、
あるスレッドが専用の関数に必要な引数を渡して、要求だけ
vectorにキューイングしてで出て行く、そして読み込み用のスレッドがこのvectorから
メッセージを取り出して画像読み込み操作を行うという形なんですが
なんかどこかで衝突?みたいなことが起こってるみたいで成功したり失敗したりです。。。
メッセージは追加時push_backで取り出し時begin()使ってます。
Javaのsynchronizedみたいに排他にするにはどうすればいいんでしょうか?
226:デフォルトの名無しさん
08/04/01 23:56:50
>>225
STLはひどい事にマルチスレッドに対応してない実装をコンパイラ製作側が提供しても良い仕様になってるので、
別途マルチスレッドに対応したフラグを外側から用意するなど措置をとる必要がある。
227:デフォルトの名無しさん
08/04/01 23:56:59
>>225
winならCriticalSectionやMutexとか。
それ以外でもならboost::threadとか。
228:デフォルトの名無しさん
08/04/02 00:03:51
STLportを使う
229:デフォルトの名無しさん
08/04/02 10:01:26
文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか?
やってること同じだと思うんですけど。
230:デフォルトの名無しさん
08/04/02 10:10:28
char a[]="test";とchar *b="test";のことを言ってるなら違いはある。とりあえず配列を使っておけば問題ない。
231:デフォルトの名無しさん
08/04/02 10:10:50
>>229
> 文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか?
> やってること同じだと思うんですけど。
その通りやってることは同じなので、好きな方でどうぞ。
232:デフォルトの名無しさん
08/04/02 10:27:44
はじめまして。
VBを今週から始めた初心者です。
上司に教わりながらやっていますが、全くわかりません。
とりあえず、言われた仕事が
モジュール2で
Public Sub 関数名()
'表を追加します
End Sub
を作成して、モジュール1でcollで呼び出すらしいんですが
表を追加の関数がわかりません。
誰か教えて下さい。
233:デフォルトの名無しさん
08/04/02 10:28:52
その上司に聞けよ。
というかスレ違いだ。
234:デフォルトの名無しさん
08/04/02 10:29:30
落ち着け
ここはC/C++スレだ
235:デフォルトの名無しさん
08/04/02 10:31:09
>>230
その違いについて知りたいんですが、、、メモリの問題とかですかね
236:デフォルトの名無しさん
08/04/02 10:33:55
232です。
申し訳ないです。
どこに書けばいいのかわからなくて。。。
237:デフォルトの名無しさん
08/04/02 10:37:38
それすら調べられないならマに向いてないから辞めた方が良い
238:デフォルトの名無しさん
08/04/02 10:48:57
>>226,227ありがとうございます。
面白そうなので自分で作ってみることにします。
239:デフォルトの名無しさん
08/04/02 10:49:38
そうですね。
辞めてしまいたいです。
240:デフォルトの名無しさん
08/04/02 10:55:29
>>239
仕事じゃなくて課題なのでは? 未経験でも出来る課題を出されたんじゃないですか?
プログラム経験はあるんですか?
241:デフォルトの名無しさん
08/04/02 11:10:26
本当に初心者なし質問かと思うのですが
URLリンク(tondol.ty.land.to)
のプログラムなんですが、数字を二つ入力するのですが
1 2
という入力ではなく
3
というように数字一つで改行されたらプログラムを終了するようにしたいのですが
どのようにすればいいのでしょうか?
242:デフォルトの名無しさん
08/04/02 11:12:30
文字列で受け取って自分で調べる
243:デフォルトの名無しさん
08/04/02 11:52:31
すいません文字列で受け取るとはどういうことでしょうか?
244:238
08/04/02 12:03:36
Mutexで神速でできてしまったんだけど、ミューテックスだとどんな制限があるんでしょうか?
245:デフォルトの名無しさん
08/04/02 12:18:56
多重起動防止
246:デフォルトの名無しさん
08/04/02 12:19:23
>>244
排他処理を追加した分遅くなる。MutexよりもCriticalSectionセクションのほうが速いので用途に応じて使い分けるとよい。
247:デフォルトの名無しさん
08/04/02 12:20:21
ミューテックスを使うと投機実行の処理が多くなったり、より速いアクセス速度のあるキャッシュへのデータ格納最適化ができなかったりする。
248:デフォルトの名無しさん
08/04/02 13:01:07
>>236
EXCELにVBAのリファレンスついてないのか?
まあ該当スレは検索すればすぐ見つかるだろうけど,質問しても
やってトライ.シリーズでいいからEXCEL/VBAの参考書一冊買え
みたいな話になるだけですぞ
249:デフォルトの名無しさん
08/04/02 13:21:53
>>236
排他制御比較一覧
URLリンク(msdn.microsoft.com)
250:デフォルトの名無しさん
08/04/02 13:22:45
上の、236じゃなくて>>236へだった
251:デフォルトの名無しさん
08/04/02 13:23:13
>>238へ
何度間違ってるんだorz
252:238
08/04/02 15:33:58
>>245-247,249-251
ありがとうございます。ほくほくです
253:デフォルトの名無しさん
08/04/02 20:29:09
c++ VisualStadio.net
TestProgプロジェクトにあるCTestClassクラスをライブラリにしてMainProjプロジェクトで使おうとしています。
CTestClassクラスが宣言されているTestClass.h、TestClass.cpp、そしてほとんどカラのstdafx.hとstdafx.cppをビルドしてTestProg.libを作成しました。
そしてMainProjプロジェクト内のファイルにて
#pragma comment(lib, "TestProg.lib")
このようにライブラリの使用を宣言するまでは問題なかった(ビルド成功)のですが、CTestClassを使おうとすると宣言がされていないとエラーが出ます。
ライブラリ内のクラスを使うにはこれらに加えて何かしないといけないのでしょうか?
ちなみにMainProjにTestClass.hとTestClass.cppを追加し、上記の#pragmaの代わりに
#include "TestClass.h" を入れるとエラーは出ませんでした。
254:デフォルトの名無しさん
08/04/02 20:43:05
TestClass.hへのパスは通ってますか?
255:デフォルトの名無しさん
08/04/02 20:55:23
/ / / / / / /
/ / / / / /
,.、 ,.、 / /
/ / ∠二二、ヽ / /
/ / / ((´・ω・`)) ちょっと船の様子を見に行ってくる…
/ ~~:~~~〈 / /
/ / ノ : _,,..ゝ /
/ / (,,..,)二i_,∠ / /
256:デフォルトの名無しさん
08/04/02 21:30:23
>>253
// MainProjプロジェクトにTestProg.libとTestClass.hコピーして
#pragma comment(lib, "TestProg.lib")
#include "TestClass.h"
257:238
08/04/02 21:32:33
∧_∧
..( *)
..( )〇
なんだか胸騒ぎがする・・・。
258:デフォルトの名無しさん
08/04/02 21:57:43
Xcodeで開発しているのですが、
"クラス::関数()", referenced from:
とエラーが出ます。
調べてもどういう意味のエラーかも分からずです。
どういう意味のエラーなんでしょうか?
259:デフォルトの名無しさん
08/04/02 22:12:53
>>258
エラーメッセージはそれだけじゃないでしょ。前か後にも何か書いてあるはず。
260:デフォルトの名無しさん
08/04/02 22:14:58
>>256
ありがとうございます。使えるようになしました。
>>254
それは何度も疑っていたので大丈夫でした。
パスが通っていないとエラーが出ますしlib自体が正常に更新されているかどうかも確認していました。
複数のサブプロジェクトでクラスを作り、メインプロジェクトでこれらをライブラリとして読み込むために試行錯誤していました。
.hと.cppをコピーしてメインプロジェクトに追加するとメインプロジェクトだけで変更が可能なのと
ファイル数が膨大になり管理がしにくくなるので改善したいと言うのが主な理由です。
今回の場合ですとMainProjプロジェクトでCTestClassクラスのメンバ変数や関数を自由に追加することが出来てしまったり
TestProgプロジェクトでCTestClassクラスを更新するとMainProjプロジェクトのTestProg.libだけでなくTestClass.hの更新も必要になってしまいます。
MainProjプロジェクトのCTestClassクラス自体に変更が加えられないような仕組みや
更新がlibだけで済むような方法は無いものなのでしょうか。
261:デフォルトの名無しさん
08/04/02 22:31:40
ヘッダをいじらなくて済むようにするイディオムとしてpimplが有名。
少なくともprivateメンバの変更では共有するヘッダに影響を与えないで済む。
262:デフォルトの名無しさん
08/04/02 23:05:52
ある型がクラス/構造体かどうか調べる方法はありますか?
あと、クラスのメンバ関数を列挙する方法はありますか
template<typename T> void enum_functions() {
if (T::is_class()) {
for (int i = 0; i < T::func_count(); ++i) {
std::cout << T::func_name(i) << '\n';
}
}
}
みたいな感じで。
263:デフォルトの名無しさん
08/04/02 23:22:54
>>231
嘘はいかんよ。
>>235
>char a[]="test";とchar *b="test";
*a='T'; /* OK */
a[0]='w'; /* OK */
// *b='T'; /* NG */
b=a; /* OK */
*b='T'; /* OK */
b[0]='w'; /* OK */
// a=NULL; /* どうだったっけ?*/
264:238
08/04/02 23:28:59
>>262
どんな実装だよ。
せめてclass Tにしようぜ
265:デフォルトの名無しさん
08/04/02 23:30:32
// *b='T'; /* NG */
*b='T'; /* OK */
どっちだよ
266:253,260
08/04/02 23:32:01
>>261
初めて知った単語なので非常に有難いです。
結局クラスをライブラリにするのはcppファイルの中身が見えなくなるだけで(ビルドが早くなったりもしますが)
いかにヘッダ部分をcppに移せるかで使用先(メインプロジェクト)での可変性が変わると言うことでしょうか。
267:デフォルトの名無しさん
08/04/02 23:34:28
>>262
思い描いている形とは違うかもしれないけど、
BoostまたはTR1にType Traitsに、is_classというものがある。
かなりコンパイラを選ぶだろうけど。
さすがにメンバの列挙はない。
268:デフォルトの名無しさん
08/04/02 23:35:43
>>259
すいません。
"クラスA::関数()",referenced from:
クラスB::関数() in クラスB.o
symbol(s) not found
collect2:ld returned 1 exit status
とあります。
269:デフォルトの名無しさん
08/04/02 23:40:16
>>265
// *b='T'; /* NG */
b=a; *b='T'; /* OK */
分かりにくくてスマソ
270:デフォルトの名無しさん
08/04/03 00:43:38
>>268
クラスB.o の中に入っている クラスB::関数() から参照されている "ク
ラスA::関数()" というシンボルが見付かりません、
とリンカー様(ld)が怒ってらっしゃる。
つまり、クラスA::関数() をコンパイルした .o ファイルやそれが入っ
ているライブラリをコマンドラインに指定する必要がある。
271:デフォルトの名無しさん
08/04/03 04:53:36
文字コードの問題です。
wchar_t buff[3];
とあって
SHIFT-JISで書かれたテキストから、fgetwsで読み込む事で
例えば、
「もじ」
ならば
buff[0]<=も
buff[1]<=じ
と、入る事を望みます。
このような処理をする場合、どのようにすればいいのでしょうか?
ちなみに、fgetwsで読むと、buff[0]とbuffr[1]で"も"が入ってしまいます。
fgetwsはsjisで書かれたテキストを自動で変換して読み込んでくれると聞いたのですが・・・。
272:デフォルトの名無しさん
08/04/03 05:00:49
あ、一応自己解決しました。
テキストを、UTF16のBOMなしにして
setlocale(LC_CTYPE, "");を設定し、バイナリモードで読めばよかったんですね。
出来れば、SJISから変換されるとありがたいんですが・・・。
273:デフォルトの名無しさん
08/04/03 08:16:33
std::vector<int> vec;
という変数があるとして、
for (int i = 0; i < vec.size(); i++) {.....}
とか書くとintとunsigned intを比較してるという警告がでて嫌なのでstatic_cast<int>(vec.size())
とかやってるのですが、これもいやです。どうすればいいですか?
274:デフォルトの名無しさん
08/04/03 08:28:55
1.iをstd::vector<int>::size_typeにする。
2.iteratorを使う。
3.STLのアルゴリズムを使う。
275:デフォルトの名無しさん
08/04/03 08:43:33
>>273
4.iをunsignedにする。
276:デフォルトの名無しさん
08/04/03 08:51:22
ありがとうございます。
STLのアルゴリズムを使うというのは、for文の中でやりたかったことがSTLのアルゴリズムで
表現できる必要がありますよね?常にできるということではないですよね?
277:デフォルトの名無しさん
08/04/03 08:55:56
>>271-272
まずは環境を書こう。
278:デフォルトの名無しさん
08/04/03 08:59:30
>>276
{...}の内容によってはちょっと面倒かも知れんので、その場合は2.かな。
279:デフォルトの名無しさん
08/04/03 12:04:46
class complex {
public:
double re;
double im;
};
こういうクラスがあるときに、operator>>(istream &, complex &a) を定義するとすると、
どういう風にやるのがよいでしょうか?
280:デフォルトの名無しさん
08/04/03 12:07:17
そんなクラスは作らずに、標準ライブラリのcomplexを使う。
281:デフォルトの名無しさん
08/04/03 14:05:47
windows2k MinGW を入れたいのです
MinGWインストーラがネット無いので使えません
ソースフォージからどれを落とせば良いでしょうか
またそれは全て同じフォルダに上書きで良いでしょうか
binフォルダなどかぶっているものがおおいんです
使いたいのはC、C++、SDL、OpenGLです
パスは適当に通そうと思っています
282:デフォルトの名無しさん
08/04/03 15:08:36
>>281
大陸へカエレ
283:デフォルトの名無しさん
08/04/03 15:10:11
専用スレで聞いた方がいいんじゃない。自分はDev C++の日本語版で入れたけど
284:281
08/04/03 15:20:11
>>283
ではMinGWスレに移動したいと思います
レス㌧でした
285:デフォルトの名無しさん
08/04/03 15:47:08
C/C++ってつおいですか
286:デフォルトの名無しさん
08/04/03 15:48:47
>>285
未定義です
287:デフォルトの名無しさん
08/04/03 15:52:35
BCBの__propertyはVCでも使えますか。VCで書いてみたら、色が変わったので。
288:デフォルトの名無しさん
08/04/03 15:54:42
MFCを使ってCMainFrameから継承されたウィンドウとCDialogから継承されたダイアログを
MTI(Multiple Top Level Window)風に同時に取扱たいです。
何か参考となるキーワードやソースやwebpageを教えて頂けないでしょうか。
289:デフォルトの名無しさん
08/04/03 16:00:47
>>287
VC入ってるのならF1押してヘルプを見るのだ
290:デフォルトの名無しさん
08/04/03 16:43:19
>>288
キーワード:
モードレスダイアログ
タイマー
291:デフォルトの名無しさん
08/04/03 17:14:42
VCのどっとねっとでないやつでVBやC#みたいなプロパティを作るものはありますか?
292:288
08/04/03 17:16:36
>>290
モードレスダイアログだとダイアログが子になってしまって、ちょっと欲しいものじゃないんです。
親子関係はなし、もしくはCMainFrameを子にしたいんです。
293:デフォルトの名無しさん
08/04/03 17:16:39
ATL
294:デフォルトの名無しさん
08/04/03 17:44:43
>>279
comlex& operator>>(istream & a)
295:デフォルトの名無しさん
08/04/03 17:52:31
>>292
ウィンドウ無か非表示の親からメインフレームとダイアログ作れば兄弟になる
296:デフォルトの名無しさん
08/04/03 17:59:36
_declspec(dllexport)
こういうのって、Cの仕様なんでしょうか? それともコンパイラの方の仕様なんでしょうか?
まとまった文章や文献をご存知の方がいらしゃいましたらよろしくお願いいたしますm(_ _)m
297:デフォルトの名無しさん
08/04/03 18:05:31
DLLはWindows用語
298:デフォルトの名無しさん
08/04/03 18:09:02
文献はMSDNにある
299:デフォルトの名無しさん
08/04/03 18:12:00
>>291
URLリンク(msdn2.microsoft.com)
>>296
独自
URLリンク(msdn2.microsoft.com)
300:デフォルトの名無しさん
08/04/03 18:20:47
先頭にアンダースコアが2つ付いたのは
一部の組み込みマクロを除いて、他は全て処理系の拡張仕様。
301:デフォルトの名無しさん
08/04/03 18:21:29
>>297
>>299
ありがとうございます。勉強してみます。
302:300
08/04/03 19:09:12
俺は無視か・・・。まあいいけどさ。
303:デフォルトの名無しさん
08/04/03 19:19:55
>>302
ばかじゃねぇのw
304:デフォルトの名無しさん
08/04/03 19:31:24
>>302 質問者がレス読んでから投稿ボタン押すまでに書き込むとスルーされる
アフリカではよくあること
305:デフォルトの名無しさん
08/04/03 19:45:47
>>302
すみません、気づきませんでした^^; ありがとうございます。
同じWindows環境でも、処理系に依存する部分は結構ありそうなので、頑張って調べてみます><
306:デフォルトの名無しさん
08/04/03 21:15:07
template<class T>
class A{
public:
void put( T t )
{
std::cout << t << std::endl;
}
};
このようなテンプレートを用意したとして、
A<int> a;
のようにintとして定義した場合に、put()にint以外の引数を
入れるとコンパイルエラーになるようにしたいんですが
a.put( 1.0f ); // 例えばこの場合コンパイルエラーが出るようにしたい
307:デフォルトの名無しさん
08/04/03 21:21:19
A<float>().put(1.0f);
308:デフォルトの名無しさん
08/04/03 21:34:58
template<class T>
class A{
public:
template<class T2>
void put( T2 t )
{
BOOST_STATIC_ASSERT(boost::is_same<T, T2>::value);
std::cout << t << std::endl;
}
};
309:デフォルトの名無しさん
08/04/03 22:00:35
C言語から自作したAPIを呼び出すにはどうすれば良いのでしょうか?
Windows APIは、#include <windows.h>で呼び出すことができるようなのですが、
ソフトウェア屋が作ったAPIをCのソースから呼び出す方法がさっぱり。
ググっては見たのですが具体的な書き方が見つかりませんでした。
参考になるサイト、もしくはソースがあれば教えてください。
310:デフォルトの名無しさん
08/04/03 22:02:40
extern "C"
311:デフォルトの名無しさん
08/04/03 22:04:05
>>309
DLLを動的に呼び出すか、ソースなら#include ""だろ
312:デフォルトの名無しさん
08/04/03 22:06:51
operator<<()の定義の中で、宣言なしにwsという変数を使ってwhite spaceを読み込んでいるものをみたのですが、
これが一体なになのかわかりません。コンパイルは出来ているのでつかえるみたいなのですが、、
ググってもいいのがひっかかりません。どうか教えてください。
313:デフォルトの名無しさん
08/04/03 22:20:15
>>310-311
ソフトウェア屋が用意したAPI(恐らくDLL)を手元のCソースから利用したいんですが…
いまいちわからないです。C言語をやるのは初めてで。
314:デフォルトの名無しさん
08/04/03 22:22:13
恐らくとか言われても・・・。
.lib をリンクして提供されてるヘッダファイルインクルードすればいいだけじゃね?
315:デフォルトの名無しさん
08/04/03 22:23:48
LoadLibrary
316:デフォルトの名無しさん
08/04/03 22:35:46
>>312
空白を読み飛ばすマニピュレータのstd::ws
317:デフォルトの名無しさん
08/04/03 22:36:49
>>297
OS/2やTOWNS-OSでもDLLだったけど生き残ったのはWindowsだけか
318:デフォルトの名無しさん
08/04/03 22:40:25
OS/2はNTの元ネタみたいなもんだし
319:デフォルトの名無しさん
08/04/03 22:40:38
>>314
なるほど…APIを触ったことがないのでどういうものかわかりませんでした。
ライブラリと同じような扱いでインクルードできるんですね。
ありがとうございました。
320:デフォルトの名無しさん
08/04/03 22:43:17
OS/2 って何?そんな子はいませんでしたよ!
321:デフォルトの名無しさん
08/04/03 22:45:56
API
URLリンク(e-words.jp)
322:デフォルトの名無しさん
08/04/03 23:42:51
std::mapのinsert()で戻ってくるiteratorとboolのpairな型はどこかに定義されていないの?
323:デフォルトの名無しさん
08/04/03 23:43:33
c++のcomplexのoperator>>の実装を見たのですが、4+5i という複素数があったとすると、
(4,5) という文字列で入力するようになっていました。実装は()とかの括弧やコンマをみて
ちゃんと処理やってたのですが、普通に考えたら、4+5iとかの文字列の入力の方が自然なような
気がするのですが、(4,5)の方がよいという理由がありますか?
よろしくお願いします。
324:デフォルトの名無しさん
08/04/03 23:47:48
C言語が(,)の入力に対応している点
a+biはC言語が対応していない
325:デフォルトの名無しさん
08/04/04 00:44:30
他人の書いた CやC++ソースが大量にあったとして、
コード解析するときってどうやってる?
Linux 環境で grep や vim + ctags で解析 → gdb で動作確認なんて
やり方してる俺は激しく時代遅れな希ガス
326:デフォルトの名無しさん
08/04/04 00:51:17
>>325
動作させられるなら、動作させてみて、どの関数が一番頻繁に呼び出されてるかをみてみる。
全体の20%のコードが80%の時間を使ってるというしな。
327:デフォルトの名無しさん
08/04/04 01:06:04
>>324
c言語が対応してないというのは、どういう意味ですか?
scanf()で一文字づつ読み込んで解析すればできませんか?
328:デフォルトの名無しさん
08/04/04 01:14:47
>>327
文字列を解析すればできるよ
しかし、直接プログラム内で kansuu(x,y)とかけるのとは違う
329:デフォルトの名無しさん
08/04/04 01:15:14
>>327
何がいいたいのかよくわからんが・・・
>complex x = 3 + 2i;
って使い方がしたいんじゃないのか?そいつぁ無理だ。(少なくともおれの知識じゃ)
なぜそこでscanfが出てくるのがさっぱりわからんが
>complex x = "3 + 2i";
なら、実装は可能だ。
ただ、種々の書式に対応するとめんどくさそうなことこの上ない実装になりそう。
330:デフォルトの名無しさん
08/04/04 01:15:48
プログラム内では、(x,y)の形にするか複素数型に変換するしか無い
331:デフォルトの名無しさん
08/04/04 01:22:17
scanf("%d+%di", &x, &y);
みたいな?w
332:デフォルトの名無しさん
08/04/04 01:35:28
いや、入力は文字列で扱ってるんだが、
"1+2i"じゃなくて、"(1,2)"みたいに、実装してあるのは何で?
って質問だと思われw
333:デフォルトの名無しさん
08/04/04 01:54:54
C++標準のcomplexって使ったことないんだけどそういう仕様なの?
仕様なら仕方ないが信じがたいんだがw
334:デフォルトの名無しさん
08/04/04 01:58:38
C++はこうだろ?
std::complex<double>(1, 3)
335:デフォルトの名無しさん
08/04/04 02:10:39
complexをiostreamで出力するときに、
"1+2i"じゃなくて"(1,2)"となっているのは何で?
ってことだろ。
336:335
08/04/04 02:12:00
× complexをiostreamで出力するときに、
○ complexをiostreamで入出力するときに、
337:デフォルトの名無しさん
08/04/04 02:23:09
コピペして使えるようにじゃね?
338:デフォルトの名無しさん
08/04/04 02:41:24
335の人が言っているのが、こっちの意図です。でも最初の人がC言語ではサポートしていない、
というのがどういう意味だったのかはわかりました。
文字列で扱うんなら、4+5iとかでも問題ないと思ったのですが、(,)で実装してしまったし、、、
4+5iとかはちょっと面倒くさそう。
339:デフォルトの名無しさん
08/04/04 07:40:38
iだったりjだったりするからじゃねw
340:デフォルトの名無しさん
08/04/04 12:05:27
テンプレートクラス作って、
そのポインタをlistにつっこんで
イテレータで走査しようとしたら怒られる
//Error
list<Hoge<T>*>::iterator it;
expected `;' before "it"
テンプレートクラスを
テンプレートのままぶち込むのがいけないのか、
それとも別のところがいけないのかでいいんで教えてください
341:デフォルトの名無しさん
08/04/04 12:30:31
- list<Hoge<T>*>::iterator it;
+ typename list<Hoge<T>*>::iterator it;
342:デフォルトの名無しさん
08/04/04 12:34:55
ああ、そういうことだったのね(´・ω・`)
ありがとー
343:デフォルトの名無しさん
08/04/04 12:35:00
>>340
そりゃ型決まってないと無理でないか?
list<Hoge<int>*>::iterator it;
とかならいけると思うけど。
344:デフォルトの名無しさん
08/04/04 12:41:23
gccだとちゃんとエラーはいてくれるがVCだと通るから困る
345:デフォルトの名無しさん
08/04/04 15:28:40
を、2ページ目にも修正入ったみたいだな。
346:デフォルトの名無しさん
08/04/04 16:45:18
教えて!!
言語を勉強したいのだが何がお勧め??
C++??Java??
347:デフォルトの名無しさん
08/04/04 16:46:17
目的は?
趣味なら何でもいいと思うよ。
348:デフォルトの名無しさん
08/04/04 16:47:57
>>346
BASIC
349:デフォルトの名無しさん
08/04/04 16:51:06
>>347
>>348
仕事でUNIXのオペレータをしています。
言語を覚えてスキルアップしたい。と思っています。
でも色んな言語がありすぎて何を始めればいいのか
分かりません。今の時代にあっていてこれからも使っていけそうな
言語を教えて下さい。お願いします。
350:デフォルトの名無しさん
08/04/04 16:53:20
>>346
スレタイが読める程度の日本語。
351:デフォルトの名無しさん
08/04/04 16:53:45
UNIXならまずはシェルスクリプトからはじめてみては?
で、awk&sed、perl、python or rubyと進むとか。
352:デフォルトの名無しさん
08/04/04 16:57:41
C/C++のスレで訊かれたなら、やっぱりC/C++と答えるべきか
353:デフォルトの名無しさん
08/04/04 16:58:14
C#といってみる
354:デフォルトの名無しさん
08/04/04 16:59:02
C++では簡単に出来てJavaでやりにくい事
その逆などを教えて下さい。
355:デフォルトの名無しさん
08/04/04 17:03:38
その手の質問はぐぐったほうが丁寧な解説出てくるよ
ここで聞いてもすれ違いのうえ端的だったり極端すぎる答えしか返ってこないよ
356:デフォルトの名無しさん
08/04/04 17:15:06
初心者のためのプログラミング言語ガイド Part7
スレリンク(tech板)
357:デフォルトの名無しさん
08/04/04 20:28:22
初心者はまずこれを読んで
ポインタを理解すること
URLリンク(builder.japan.zdnet.com)
これができない奴はC/C++いじるの辞めろ
適正が0かマイナスだ
358:デフォルトの名無しさん
08/04/04 20:58:48
>>94
359:デフォルトの名無しさん
08/04/04 21:22:45
それ1週間前のネタ
360:デフォルトの名無しさん
08/04/04 21:50:48
C++にポインタ排卵だろ
361:デフォルトの名無しさん
08/04/04 21:57:43
まあ大部分は排除できるな。
362:デフォルトの名無しさん
08/04/04 22:21:10
constメソッドからでもポインタ型メンバの参照先なら操作し放題とか駄目活用している
363:238
08/04/04 22:32:21
protectedでstaticな独自クラスの配列の参照の初期化で他のクラスのメンバ変数を与えたいんですが
無理ですよね・・・?
もし他のクラスのstatic変数なら大丈夫でしょうか?
364:デフォルトの名無しさん
08/04/04 22:36:38
RTTIは実際にどういう場面で使われるんですか?
template<typename T> void hoge(const T &a) {
if (typeid(a) == typeid(int)) { ... }
}
とかやるんですかね
365:デフォルトの名無しさん
08/04/04 22:37:35
クラスのインスタンス自身への参照ならいくらでも可能だと思うが、
その中のメンバ変数と言われると難しいというか、
そもそもそんな怪しい事しようとしている事にまず疑問を持たざるを得ない。
366:デフォルトの名無しさん
08/04/04 22:38:45
>>364
dynamic_cast も RTTI を利用してる。
typeid はあまり使う事は無いな。
367:デフォルトの名無しさん
08/04/04 22:54:27
dynamic_castなら、よくこういう状況で使いたくなる。
1. ライブラリの用意した基底クラスBから派生した自作クラスDを作る。
2. Dのインスタンスをライブラリに渡す。
3. ライブラリからのコールバックで2で渡したものがB型への参照・ポインタで与えられる。
この例だと結局boost::polymorphic_downcastにするんだけどね。
>>364
その例だったら特殊化で十分。
368:デフォルトの名無しさん
08/04/04 23:00:11
配列の参照のスタティックなクラス変数のクラス定義外での宣言って
Hoge Piyo::(&foo)[][100];
じゃないの・・・?
369:デフォルトの名無しさん
08/04/04 23:05:51
とりあえずコンパイルの通るコードを頼む
370:デフォルトの名無しさん
08/04/04 23:09:04
>>360
多態とか
371:デフォルトの名無しさん
08/04/04 23:09:50
スマートポインタでいい。
372:デフォルトの名無しさん
08/04/04 23:58:47
でいいというか、ポインタ使えないなら、ポインタもどきを使うしかない。
クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、
嫌でもポインタ使わなきゃならないと思うんだけど。
373:デフォルトの名無しさん
08/04/05 00:07:58
大体ポインタを理解できないならスマートポインタも理解できないかと
360は何を言いたかったのだろう
374:デフォルトの名無しさん
08/04/05 00:08:53
スマートポインタはアドレス演算とかやらないから
scoped_ptr くらいなら何とかなるんじゃね?
375:デフォルトの名無しさん
08/04/05 00:15:57
ダメな奴は、やり方が言語仕様に引っ張られる。
376:デフォルトの名無しさん
08/04/05 00:17:42
いやイテレータ使うならアドレス演算と大して変わらないんじゃないか
ポインタわからないようではC++できないというのは真実だと思うけど
377:デフォルトの名無しさん
08/04/05 01:24:51
排卵日
378:デフォルトの名無しさん
08/04/05 03:16:18
メンバ変数の文字列の一部を新しい文字列として返したいんですが
どういう方法がありますか?
こういうのです
class Test {
private:
char data[256];
public:
char * getStr()
{
char *ret = new char[3];
ret[0] = data[0];
ret[1] = data[1];
ret[2] = data[2];
return ret;
}
};
これを
std::string str = getStr();
このように使った場合retのデリートができないので
メモリリークしますよね?何かいい方法ありませんか?
379:デフォルトの名無しさん
08/04/05 04:35:02
const std::string getData() const { return std::string( data ); }
380:デフォルトの名無しさん
08/04/05 06:48:36
終端に '\0' を追加するのも忘れずに
381:デフォルトの名無しさん
08/04/05 08:04:56
クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、
382:デフォルトの名無しさん
08/04/05 08:49:39
void getStr(std::string& str) const {
str.assign(data, 3);
}
std::string getStr() const {
return std::string(data, 3);
}
後者は代入する時にコピーが発生するので場合によっては効率悪いが
(初期化の場合は大抵のコンパイラなら戻り値最適化してくれるので大抵コピーは発生しない)、
かといって前者は必ず変数用意しないといけない。
どっちにするか、あるいは両方用意するかはお好きなように。
まあ、string にどんなメンバがあるかくらい見とけ。
URLリンク(www.wakhok.ac.jp)
383:デフォルトの名無しさん
08/04/05 10:43:49
>>381
参照のようなconstなメンバー変数を持つとコピーコンストラクタが書けない
一方ほとんどのコンテナはメモリ確保を自動でするからコピーが発生する
常識だと思ってたんだけどどこかおかしいのか
384:デフォルトの名無しさん
08/04/05 10:53:24
デフォルトコンストラクタが書けないと言った方が正しいか
385:デフォルトの名無しさん
08/04/05 11:06:11
コピコンは書けるだろ?
書けないのは代入演算子。
386:デフォルトの名無しさん
08/04/05 12:09:51
終了文字の\0って入れなきゃいけないんでしょうか。
サンプルで\0を使っているコードを\0消しても正常に動作するんですが。
387:デフォルトの名無しさん
08/04/05 12:14:40
BCCで「異なる ~型へのポインタが混在している」って出るんですが、
これってどうすれば解決できるんでしょう?
箇所は
vsprintf(unsigned char*,const char*,va_list);
って使ってるところなんですが、unsignedのポインタからsignedのポインタにはキャストできないって言われたし・・・
388:デフォルトの名無しさん
08/04/05 12:14:41
>>386
コードによる。サンプル晒せ。
実はどこかで\0が付いているだけかもしれない。
389:386
08/04/05 12:28:09
>>388
これです。
int CreateSave() {
HANDLE hFile;
SYSTEMTIME st;
TCHAR szTime[128];
TCHAR *lpszBuf;
DWORD dwAccBytes;
DWORD dwSize = 0L;
HGLOBAL hMem;
DWORD dwLen;
GetLocalTime(&st);
wsprintf(szTime,_T("\r\nファイル作成時: %d年%02d月%02d日%02d時%02d分%02d秒"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
dwLen = (DWORD)lstrlen(szTime);
390:386
08/04/05 12:28:48
続き
hFile = CreateFile(_T("ファイルログ.txt"),GENERIC_READ, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
dwSize = GetFileSize(hFile, NULL) + dwLen;
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1);
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';
hFile = CreateFile(_T("ファイルログ.txt"), GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, lpszBuf, (DWORD)lstrlen(lpszBuf), &dwAccBytes, NULL);
CloseHandle(hFile);
GlobalUnlock(hMem);
GlobalFree(hMem);
return -1;
}
391:デフォルトの名無しさん
08/04/05 12:30:09
>>387
(const signed char *)にキャスト
392:デフォルトの名無しさん
08/04/05 12:50:12
>>390
よく読んでないけどstrcat(lpszBuf, szTime);この時点で¥0がついてると思われ
393:デフォルトの名無しさん
08/04/05 12:58:53
>>391
constってことは第2引数にですよね?やったら同じエラーが2個に増えたんですけど・・・
394:デフォルトの名無しさん
08/04/05 12:59:59
constを破るキャストがあるんですが、あれがあったらconstの意味なくないですか?
395:デフォルトの名無しさん
08/04/05 13:04:11
constは破るためにある
だから const const charがあるだろ
396:デフォルトの名無しさん
08/04/05 14:33:43
>>390
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';
このあたりか。
何か無茶苦茶危険なコードに見えるんだけど。
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1); ← dwSize 文字分のメモリを確保してるつもりのようだが、+1 の位置がおかしい(TCHAR が2バイトの時に領域が足りない)
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL); ← dwSize 読み込む
CloseHandle(hFile);
lstrcat(lpszBuf, szTime); ← '\0' を付けないまま lstrcat は危険というか、szTime の文字数分領域がさらに必要なんだけどその領域を確保すらしていない
lpszBuf[dwSize] = '\0'; ← lstrcat の前に行う
397:デフォルトの名無しさん
08/04/05 14:35:01
しかも、lpszBuf[dwSize] = '\0'; じゃなくて lpszBuf[dwAccBytes] = '\0'; だな。
398:デフォルトの名無しさん
08/04/05 14:41:08
Unicodeビルドかどうかで、ファイルの文字コードまで
影響を受けるというのは良くない場合のほうが多いと思うけど、
それはいいのか?
399:デフォルトの名無しさん
08/04/05 15:57:43
何もひねらずに考えるとこうですが
if( n % 2 )
printf( "奇数です\n" );
else
printf( "偶数です\n" );
奇数か偶数か調べるもっともスマートなコードってどんなんですかね?
400:デフォルトの名無しさん
08/04/05 15:59:38
int isOdd(int n){ return n % 2; }
if( isOdd(n) )
printf( "奇数です\n" );
else
printf( "偶数です\n" );
401:デフォルトの名無しさん
08/04/05 16:00:21
スマートってのが読みやすいって意味ならそれでいいんじゃね?
スマートが短いって意味なら、いろいろあるだろうけど。
402:デフォルトの名無しさん
08/04/05 16:00:43
inline bool isOdd(int n) { return n % 2 != 0; }
403:デフォルトの名無しさん
08/04/05 16:07:03
下位1bitでも調べればいいんじゃね
スマートといえるかわからんけど
404:デフォルトの名無しさん
08/04/05 16:08:36
最下位ビット調べて0なら偶数
405:デフォルトの名無しさん
08/04/05 16:09:05
かぶった><
406:デフォルトの名無しさん
08/04/05 16:10:52
この程度なら最適化されないのかな?
407:デフォルトの名無しさん
08/04/05 16:23:00
まともなコンパイラならするよ。
408:デフォルトの名無しさん
08/04/05 17:00:52
std::string のfind()とfind_first_of()の違いって何ですか?
どちらも最初の位置を返すと思うんですが
409:デフォルトの名無しさん
08/04/05 17:04:02
findはコンテナから特定の要素を見つける。
find_first_ofはコンテナから特定のコンテナの要素を見つける。
410:デフォルトの名無しさん
08/04/05 17:21:25
std::string str("hogefugapiyo");
std::string::size_type find = str.find_first_of("abc");
"abc"のうち一番最初に見つかった要素の位置を返す
コンパイルが通るかは試してないのでわからん
411:デフォルトの名無しさん
08/04/05 18:17:44
質問です。
以下のような二つのコードの時間を計ってみたら、
コードBの方が早く、コードAはすさまじく重くなりました。
なぜでしょうか?
あと、コードAの方で、変数aをデバッグで値を見ると、
1.731e-040#DEN のように表示されます。
#DENとは何なんでしょうか?
よろしくお願いします。
環境はVisual c++ 2005です。
//コードA
for(int i =0; i< 5000; i++){
float a = 1.731e-040f;
float b = 1.731e-040f;
float the_test = a*b;
}
//コードB
for(int i =0; i< 5000; i++){
float a = 0.1f;
float b = 0.1f;
float the_test = a*b;
}
412:デフォルトの名無しさん
08/04/05 18:31:22
>>411
DENormal number (非正規化数)
FPUによっては非正規化数の演算をサポートしてなくて、
これをソフトウェア側でエミュレートしてる場合がある。
すると、パフォーマンスが落ちる原因になる。
413:じじ
08/04/05 18:57:43
MFCをつかったマルチスレッドプログラミングを仕事で要求されているの
ですが、APPクラスの子レッドとしておくのがいいのでしょうか?
414:デフォルトの名無しさん
08/04/05 19:17:30
enum は ビットマスクしてもいいですか?
415:デフォルトの名無しさん
08/04/05 20:03:42
どうやったらうまくコーディングできるんだろう?
すぱげってぃーなコードになってしまう。やっぱり慣れるしかない?
以下サンプル
void binary_search(double x,double y,double *z)
{
int i;
double c,j;
j = 0.0000001;
for(i=0;y*y - 2 > j;i++)
{
if(x*x - 2 < 0 && y*y - 2 > 0)
{
c = (x+y)/2;
if(c*c - 2 > 0) y = c; else x = c;
}
binary_search(x,y,z);
}
*z = x;
}
再帰しまくりでサーセン。でもどうやったら再帰せずに実現できるだろう?
考えるのが面倒&考えても良く分からないので再帰に走る今日この頃。
416:デフォルトの名無しさん
08/04/05 20:04:37
無理に再帰を使わない方がスパゲティ化する。
417:デフォルトの名無しさん
08/04/05 20:11:04
再帰はスタックで実現している。
418:デフォルトの名無しさん
08/04/05 20:12:39
>>415
何がしたいんだよ?
binary_search(x,y,z);
↓
//binary_search(x,y,z);
419:デフォルトの名無しさん
08/04/05 20:21:12
バイナリサーチをバイナリデータのサーチと勘違いしてたりして
変数一文字でコメントもなくて通じると思ってるんだろうか
420:デフォルトの名無しさん
08/04/05 20:29:23
binary search じゃなくて bisection method の間違いだったわ
恥ずかしい。。。。鬱だしのう orz
421:デフォルトの名無しさん
08/04/05 22:55:05
これが日本のITレベルだ
スレリンク(prog板:43-44番)
くずばっかw
422:デフォルトの名無しさん
08/04/05 23:05:51
>>421
すまん、記事のコメントと同じ事をいいたいのか
それとも、2ページ目の解説についていいたいのか
さっぱり分からないから、ちゃんと説明してくれないか?
423:デフォルトの名無しさん
08/04/05 23:06:44
x 日本
o IBM
424:デフォルトの名無しさん
08/04/05 23:37:02
内部に二次元配列をもつクラスから、instance[0][0]みたいな書き方で値を取得したいと思ってます。
double operator[][](int x, int y)
のような書き方は出来ないみたいなので、(コンパイル失敗しました)、
この場合どうすればいいでしょうか?