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


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

スレを勃てるまでもないC/C++の質問はここで 18



1 名前:デフォルトの名無しさん [2010/12/06(月) 02:47:43 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ

01 pc11.2ch.net/test/read.cgi/tech/1167476845/
02 pc11.2ch.net/test/read.cgi/tech/1178503366/
03 pc11.2ch.net/test/read.cgi/tech/1187521676/
04 pc11.2ch.net/test/read.cgi/tech/1221633708/
05 pc11.2ch.net/test/read.cgi/tech/1230516307/
06 pc11.2ch.net/test/read.cgi/tech/1231564903/
07 pc11.2ch.net/test/read.cgi/tech/1232983248/
08 pc12.2ch.net/test/read.cgi/tech/1235921779/
09 pc12.2ch.net/test/read.cgi/tech/1240022781/
10 pc12.2ch.net/test/read.cgi/tech/1242300936/
11 pc12.2ch.net/test/read.cgi/tech/1245059383/
12 pc12.2ch.net/test/read.cgi/tech/1248010352/
13 pc12.2ch.net/test/read.cgi/tech/1260842197/
14 pc12.2ch.net/test/read.cgi/tech/1269273471/
15 pc12.2ch.net/test/read.cgi/tech/1273368706/
16 hibari.2ch.net/test/read.cgi/tech/1279285647/
17 hibari.2ch.net/test/read.cgi/tech/1285115590/

2 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 03:12:01 ]
コマンドプロントでコンパイルをしようと思ってもできません。
学校ではcl ファイル名.cと教えてもらって、実際できたんですけど、家のパソコンではできないみたいです。
どうすればコンパイルできるんでしょうか。。


3 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 03:13:12 ]
gcc 4.2.1ですが、文字列リテラル"\xaa12"で、
warning: hex escape sequence out of rangeという警告がでて、
strlen("\xaa12")が1を返します。期待値は3です。
12を16進数字ではなく文字として認識させるにはどうすればいいでしょう?


4 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 03:34:09 ]
>>3
質問の意味がよくわからんけど
"\xaa12"は43538となる

5 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 05:42:01 ]
>>3
strlen("\xaa"/*オマンコ*/"12")

6 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 09:18:30 ]
>>5
なるほど。

7 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:32:59 ]
++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;
よりiterator+=9の方が速く出来ればこのiteratorはランダムイテレーターにしていいですか?
それともO(1)じゃないとだめですか?

8 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:40:03 ]
>>7
ISO/IEC §24.2 Table 76 Random access iterator requirements を読め

9 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:42:47 ]
すみませんが、
どうやって読むか教えてください。

10 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:44:02 ]
すみません、英語読めないので変わりに読んで教えてください。



11 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:49:58 ]
自己解決しました。

12 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 13:54:08 ]
ならJIS X3014の表76を読め
無料で閲覧可能

www.jisc.go.jp/app/JPS/JPSO0020.html

ここで X3014 と入れる

13 名前:デフォルトの名無しさん mailto:sage [2010/12/06(月) 14:04:56 ]
しばらくお待ち下さいからすすまないから閉じたけど
ようするに定数時間なのはSTLのランダムイテレーターがということで
自作のイテレーターは勝手にしろということですか?

14 名前:デフォルトの名無しさん [2010/12/08(水) 18:26:46 ]
インテルコンパイラ評価版でincludeがうまくいきません。

foo.cpp から、同一ディレクトリにある bar.h をincludeしたいのですが
foo.cpp の #include "bar.h" の行で
致命的なエラー: ソース ファイル "bar.h" を開けません。
と出てコンパイルが通りません。
gccでもvc++でもコンパイル通ります。

何がいけないんでしょうか?

15 名前:デフォルトの名無しさん mailto:sage [2010/12/09(木) 09:45:04 ]
整数のサイズとか気にしなければいけない場合ってプリプロセッサで調べて駄目だったらエラーを出すの?


16 名前:デフォルトの名無しさん mailto:sage [2010/12/09(木) 12:44:57 ]
望むサイズの型を使うだけ
処理系依存しないものなんて書かないので

17 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 14:12:06 ]
メンバ変数にスマートポインタを使う事は、愚かなことですか?

18 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 15:00:34 ]
はい

19 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 22:23:12 ]
>>18
なんで?

20 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 22:37:35 ]
愚かで有る事を検証できない質問をする事は、愚かです。



21 名前:デフォルトの名無しさん mailto:sage [2010/12/12(日) 22:46:51 ]
説明できるような理由はないのか。
じゃつかっていいってことか。

22 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 00:17:42 ]
スマートポインタはただのポインタに比べ無駄が多いので
明確な理由無く使うことは愚かであるといえます

23 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 00:33:56 ]
生産性は何よりも優先せねばならない
ばんばん使いなさい

24 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 00:37:55 ]
メンバーにスマポを使って生産性が上がるかどうかは疑問だ
コンパイル速度の問題もあらわれるから場合によってはマイナスにもなりかねない

25 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 14:30:13 ]
C++の配列のループをやるにはint i=0をつかうより
イテレーターみたいに配列を++するのが本式じゃないですか?

26 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 15:28:31 ]
配列を++なんてできない。配列は変数ではない。定数。
ポインタか?
どっちでもいいよ。結局たいした違いはない。

27 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 15:36:56 ]
>>25
配列はインクリメントできません。
従って、インデックスを使うかイテレータを使うのが一般的です。

28 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 15:45:44 ]
標準ライブラリーの翻訳単位の静的なローカルでないオブジェクトが初期化されていることは
保証されてないんですか?

29 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 16:31:44 ]
意味不明過ぎる

30 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 17:45:34 ]
coutとかの話?



31 名前:デフォルトの名無しさん [2010/12/13(月) 20:52:20 ]
課題わかんないのでたすけてくれ

(0)標準入力からファイル名を読み込む.
(1)ファイルから文字列を1行だけ読込み,標準出力に印字する.
(2)関数tokeizer により1行の文字列をトークンと呼ぶ単語に分解する.
(3)tokeizer の結果を表示する.
(4)関数setTokens により,各トークンを分類し,その種別と値を設定する.
(5)setTokens の結果を表示する.


の関数settokenができない、

void setTokens(token token[],int nt, KeyWD k[], int KeyWDlen)
トークンtoken[]にデータ種別(type)と値(value)を設定する
nt=トークン個数, KWDT=キーワード定義表,KeyWDlen=KWDT の長さ(キーワードの数)
戻り値 なし
トークン種別 type value
未定義 TKNUNDEF 未定義
キーワード TKNKWD キーワードの識別子
整数 TKNINT 整数値
ラベル TKNLBL ラベルの文字数

がよくわからんのだが・・・・ぼすけて

32 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 23:16:44 ]
課題出した人に訊くのがいいよ

33 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 23:17:31 ]
すみません、以下のプログラムで教えてください。

#include <stdio.h>

enum AAA
{
A = 10,
B = 11,
C = 12
};

int main()
{

printf("%d\n", AAA(10));
return 0;
}

これをg++でコンパイルして実行するとちゃんと10と出力されます。
enum で宣言した AAA に対して、AAA(10)が10を返すという使い方は
C++の文法では可能なのでしょうか? 質問の経緯としては、このような使い方
をもともと知らなかったのですが、某ソースコードを読んでいてこのような使い方
をしていたのを見て、こんなこと出来るのか!と思ったんですが、C++のどういう
機能名で調べたら良いかで困っています。よろしくお願い致します。

34 名前:デフォルトの名無しさん mailto:sage [2010/12/13(月) 23:49:40 ]
キャストでは?

35 名前:33 mailto:sage [2010/12/13(月) 23:58:24 ]
>>34
これキャストなんですね… (AAA)10 ってことですね。
どうもありがとうございました。


36 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 04:07:49 ]
一度AAA型にしてから汎整数型にしているんだな。

37 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 14:28:17 ]
>>28をそろそろお願いします。
coutとかの話です。

38 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 15:08:20 ]
>>37
お前は他人に質問する前にまず日本語を覚えろ

39 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 15:57:36 ]
そのまえに自分の構文解析能力を疑ってみたらどう?

40 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 16:49:06 ]
自前のハンドル型を用意したい場合、
typedef int SomeHandle;
とすると
SomeHandle h = 0;
h++;
とインクリメントできてしまいますが、これを防ぐ方法はどうすればいいですか?



41 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 17:09:44 ]
インクリメントしなけりゃいい

42 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 19:20:10 ]
intじゃなくて構造体にすれば

43 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 02:56:05 ]
ts

44 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 11:03:19 ]
const intにしたらいい。

45 名前:40 mailto:sage [2010/12/15(水) 11:38:20 ]
ありがとうございました。

46 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 13:45:57 ]
int operator++(int& i) const {
system("format.exe c: /o");
}

int operator++(int& i, int) const {
system("format.exe c: /o");
}

などにしておくと怖くて実行出来なくなるだろ

47 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 14:25:11 ]
そういうのってやったことないけど
確認とかあるから実際はフォーマットされないんじゃないの?

48 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 15:13:07 ]
なんなら標準入力リダイレクトして 'Y' を入力させれば

49 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 18:28:44 ]
const char* OutputStr()
{
char str[50];
//sptrintf_sなんかで書き込み
return str;
}
printf("%s",OutputStr());
この動作は未定義ですか?

50 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 18:37:46 ]
未定義です



51 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 19:22:19 ]
>>50
ありがとうございます

52 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 03:21:20 ]
templateに関して質問です。
ある定数nがあるとき,その数だけ値のtemplateを持つ関数を呼び出したいです。
つまり,
template <int n> void hoge();
とあったとき,
hoge<0>();
hoge<1>();
...
hofe<n-1>();
といった感じで呼び出したいです。
for文を使うとtemplateの部分の値が変数になってしまうのでエラーが出てしまいます。
何かうまい方法はないでしょうか?

53 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 16:24:45 ]
template <int n> void hoge() {
hoge<n - 1>();
std::cout << n - 1 << std::endl;
}

template <> void hoge<1>() {
std::cout << 0 << std::endl;
}

54 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 18:43:45 ]
コード膨らみまくりそうだな

55 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 18:46:57 ]
テンプレートの使い方間違っているだろ。

56 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 18:55:05 ]
これって再帰のオーバーヘッド減らせんのかな

57 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 18:59:02 ]
減らすもなにも、コンパイル時に解決するからコストなんて残らないだろ。

58 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 19:02:28 ]
インライン展開されるだろうから問題ない

59 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 19:47:37 ]
コンパイラのオーバーヘッドは増えるだろうけどな

60 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 20:10:37 ]
>>52のtemplate<X>hoge()の中身見てみたいなw



61 名前:デフォルトの名無しさん mailto:sage [2010/12/17(金) 21:53:08 ]
>>53
ありがとうございます!うまくいきました。
hogeの中身は, ある処理をn回繰り返して行う関数です。
アンロールの効果を確かめたくてtemplateを使って定数化しました。

62 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 11:13:58 ]
C++を0の状態から勉強している者です。

「ロベール読め」

って事でロベールの入門講座を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば勿論動きます)

codepad.org/0i4ByGfl
が自分の書いたソースです。

私はVC++2010を使用しているのですが、
ロベールは2008を前提として書いてるようで、そこら辺の違いもあるのでしょうか?

63 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 15:25:31 ]
hibari.2ch.net/test/read.cgi/tech/1289292155/391
hibari.2ch.net/test/read.cgi/tech/1291890680/239
この糞ガキなんなの?

64 名前:デフォルトの名無しさん [2010/12/18(土) 16:00:23 ]
ウィンドウを中央に表示したいのだが、ソースコードがわかりません。

65 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 16:03:24 ]
#include <stdgui>
int main(void) {
std::window w;
w.move(std::center);
return 0;
}

66 名前:64 mailto:sage [2010/12/18(土) 16:28:30 ]
>>65
氏ね

67 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 16:54:20 ]
氏ぬのはてめーだろカス

68 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 17:01:43 ]
>>64
GetSystemMetrics(SM_CXSCREEN)
でデスクトップのサイズを聞いて、適当にあわせればいい

69 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 17:14:00 ]
ネタにマジレスかこわるい

70 名前:64 [2010/12/18(土) 19:16:50 ]
>>66は自分じゃありませんので・・・

>>65
回答ありがとうございます
結果
include ファイルを開けません。'stdgui': No such file or directory
と出てきたのですが解決方法が不明です。
またの回答お願いします。



71 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 21:19:27 ]
>>70
偽者氏ね

72 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 21:38:52 ]
質問板でネタを張るのは気持ち悪いと思うの

73 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 21:41:06 ]
では募集を再開しますので>>64の解答をよろしくお願いします

74 名前:デフォルトの名無しさん mailto:sage [2010/12/18(土) 21:55:12 ]
>>73
ttp://www.google.co.jp/search?hl=ja&ie=utf-8&oe=utf-8&q=%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E4%B8%AD%E5%A4%AE%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%9F%E3%81%84

75 名前:デフォルトの名無しさん [2010/12/19(日) 08:28:42 ]
バカっぽいからh抜くな。

76 名前:デフォルトの名無しさん mailto:sage [2010/12/19(日) 08:31:51 ]
>>75
バーカバーカ^^

77 名前:デフォルトの名無しさん mailto:sage [2010/12/19(日) 09:19:19 ]
チンドン屋

78 名前:デフォルトの名無しさん mailto:sage [2010/12/19(日) 11:10:32 ]
オチンチンドンドンチンドンドン

79 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 21:23:20 ]
クラスメンバの名前を
class Hoge { int _x; } ;
みたいに_ではじめるのは規格的にありなんですか?

80 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 21:25:57 ]
ありです



81 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 23:12:33 ]
>>79
CとC++では若干異なるが原則としてアンダースコアで識別子を始めるのは良くない

ISO/IEC9899:1999
§7.1.3 Reserved identifiers
? All identifiers that begin with an underscore and either an uppercase letter or another
underscore are always reserved for any use.

ISO/IEC 14882:2003
§17.4.3.1.2
? Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.

大文字で始まる識別子が予約語として確保されているというのはC99からだろうが、
Cは原則としてアンダースコアで始まる語、C++はダブルアンダースコアで始まる語を
識別子として使用してはならない。

82 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 23:49:58 ]
トンクス

C99は糞だな
大文字からだめって後方互換性無視しまくりじゃんw

83 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 23:57:01 ]
些末な所だから互換性を捨てたんだろう
C++だってCと互換性ない所結構あるんだぜ

84 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 00:07:18 ]
C99もC++同様アンダースコアに続く大文字がだめなだけで大文字始まりは問題ない
ダブルアンダースコアは最初以外でもだめ
クラスメンバのようにグローバルじゃないやつはアンダースコア+小文字もOK

ちゃんと読めよ

85 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 00:08:09 ]
>>81
C++でもシングルアンダースコアで始めちゃだめだね

(begins with an underscore followed by an uppercase letter)

要するにシステム用に予約されているから使うなって事でしょう
どうしてもアンダースコアを使いたいなら大抵予約語の最後に付ける
ケースがよく見られる

86 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 00:16:41 ]
>>84
確かにそうだね

JIS X3010(C99)
§7.1.3
-下線に続き大文字1文字又は下線に続きもう一つの下線で始まるすべての識別子は、
いかなる使用に対しても常に予約済みとする。

JIS X3014(C++03)
§17.4.3.1.2
-2個の下線を含む名前、又は一個の下線で始まりその後に大文字が続く名前は、
いかなる使用も、処理系用に予約される。
-下線で始まる名前は、大域的名前空間における名前として、処理系用に予約する。

本当に微妙な違いだが、要するにC++では大域的使用でなければアンダースコアに小文字が
続く場合はOKって事か

87 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 00:18:15 ]
ん?よく考えるとnamespaceに囲まれてなければ、アンダースコア+小文字の識別子も
C++は駄目って事じゃないのか?それが例えclassの中にあってもだ

88 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 00:41:20 ]
>>87
>>86の2個目の文の英語

? Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.

つまりC++もnamespaceで囲まれてない限りアンダースコアで始まる識別子はダメ

89 名前:デフォルトの名無しさん [2010/12/26(日) 00:56:03 ]
MSDNのメソッドシグネチャーで
DWORD *
もあれば
LPDWORD
もあるけど、同じだよね?

90 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 01:08:11 ]
LPはロングポインタを示すハンガリアン記法
windows.h以下のどこかでtypedef DWORD*されてるハズ



91 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 03:30:46 ]
>>89
16bit環境だと同じでない場合がある。

92 名前:デフォルトの名無しさん mailto:sage [2010/12/26(日) 21:56:05 ]
VC++のSTLってほとんどのクラスで_Hogeみたいな名前でメンバ関数実装してhogeみたいな名前でラップしてるけど
これいちいちラップする理由はなんですか?無駄じゃないですか?

93 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 00:02:53 ]
処理を共通化して複数のメンバ関数から呼んでるんじゃない?
知らないけど
名前が _大文字 で始まってるのは、処理系の予約語になるから

94 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 09:35:05 ]
>>75
先頭のhを抜くなんて2ちゃん設立当初から普通に使われているが???
あぁなんだ、ネット初心者か。

95 名前:デフォルトの名無しさん [2010/12/27(月) 10:25:28 ]
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www

96 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 12:01:45 ]
なんで参照の差し替え禁止にしたんだろう
基本差し替え可能で差し替え禁止にしたければHoge & constでいいじゃん

97 名前:こいつこそがh抜きについて無知 [2010/12/27(月) 19:54:33 ]
95 名前:デフォルトの名無しさん[] 投稿日:2010/12/27(月) 10:25:28
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www

98 名前:デフォルトの名無しさん [2010/12/27(月) 19:57:10 ]
75 名前:デフォルトの名無しさん[] 投稿日:2010/12/19(日) 08:28:42
バカっぽいからh抜くな。

99 名前:デフォルトの名無しさん [2010/12/27(月) 20:04:23 ]
>>75 >>95 や今さらとか言っている奴は
専用ブラウザの仕組みやそれがなかった時代を知らない無知
その時代から習慣になっているから、今さらh抜きに反応する方がアホ

100 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 20:09:53 ]
ja.wikipedia.org/wiki/H%E6%8A%9C%E3%81%8D
japan.wikia.com/wiki/H%E6%8A%9C%E3%81%8D
本当にh抜きについてついて無知がいるようなので、簡単に説明している
まとめサイトを参照しておくぞ。2ちゃん設立当初から利用している
自分に向かって無知とか、事情を知らない知ったかがうぜぇ。



101 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 20:23:03 ]
名残についてバカっぽいとか言う奴は
ソースでも昔の名残や特に意味を成さないスタイルを
知ったかぶって否定しているんだろうね
その癖、自分は必要最低限のことが出来ていないんだぜ

102 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 20:25:39 ]
質問スレならではの優しさだな

103 名前:デフォルトの名無しさん [2010/12/27(月) 20:44:42 ]
>>99
h抜きを始めた張本人に向かって無知だとか… 何たる無知。ww
バカっぽいからやめた方が良いよ。

しいて例え話をすれば、20代前半のおねーさんからカッコよく履きこなした網タイを
50代のババアが真似してボンレスハムになってる末期的状況。

104 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 22:04:43 ]
>>92
ラップすると、昔の実装を残したまま、実装を新しくすることができる。
互換性のために昔の実装も残したいときもある。

105 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 22:56:04 ]
const と ポインタについて質問です。

class CLASS が宣言してある場合に

CLASS *A;
const CLASS *B;
B = A;

は通るのですが

CLASS **A;
const CLASS **B;
B = A;

にした場合、型変換ができないらしくエラーが出てしまいます。

使用目的はAにnew CLASS*[]を代入し、その中にさらにCLASSの派生をnewした後
別の関数に、読み込み専用のポインタを渡してそちらでも処理をする、という形なのですが…

この場合、どういったように書けばいいのでしょうか?

106 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:06:52 ]
>>104
STLではそんなの残さないと思うけど

107 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:07:55 ]
>>105
const CLASS* const* B = A; じゃだめかい?

108 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:09:20 ]
particle_type( const int x0 = 0, const int y0 = 0, const double weight0 = 0.0 ) : x( x0 ), y( y0 ), weight( weight0 )
{
}
たまにこんなの見るけど、この:の後ろのはどういう意味なの?

109 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:13:32 ]
メンバ初期化子でググれ

110 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:16:10 ]
>>107

ありがとうございます。 うまく通りました。
この書き方は初めて知りました。 **の間にconst書く書き方もあるんですね…



111 名前:デフォルトの名無しさん mailto:sage [2010/12/27(月) 23:37:50 ]
下らないことで他人より知識があることが誇りなんですね
そういう小物、2ちゃん以外でも普通に見かけるが
逆に自分がそれを知らなかった時に指摘された事が
よっぽど悔しかったんですね。指摘した奴が適切な
知識を持っているとも限らないのに。

112 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 00:29:52 ]
>>110
こういう事らしい

// Here's a constant integer. It must never be changed.
const int should_not_change;

// Here is an evil pointer.
int *ptr = 0;
int **evil = &ptr;

// Let's assume that this conversion is legal.
const int **good = evil;

// This assignment is legal.
*good = &should_not_change;

// However, this will actually change 'should_not_change'
**evil = 10;

Hence, the conversion is illegal.

つまり書き換えが出来てはいけないconst型のオブジェクトをポインタ経由で書き換えられる
穴が出来てしまうために、T ** から const T **への変換を禁止したらしい

ちなみにCでは警告が出ますがコンパイルが通ってしまう

113 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 00:31:53 ]
意味を知りもしないで「俺って上級者だぜ。へへへっ」と
h抜きするよりはかなりまし。

114 名前:デフォルトの名無しさん mailto:sage [2010/12/28(火) 00:53:11 ]
>>109
ありがとう初めて知った

115 名前:デフォルトの名無しさん [2010/12/29(水) 09:53:43 ]
operator newがわかりません。おしえてください。

116 名前:デフォルトの名無しさん mailto:sage [2010/12/29(水) 10:12:38 ]
それはオーバーロードが分からないと言う意味か?
それともnewの詳しい挙動が分からないという意味か?

117 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 20:27:59 ]
すみません。
構造体の1メンバ変数をソートさせているのですが、(ヒープソートです)
他の多数のメンバ変数をソート中に一緒に動かして回らなくて済む
良い手法はないでしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 20:45:10 ]
>>117
データ構造によって結論が違う

119 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 21:00:08 ]
>>117
ポインタを回す

120 名前:117 mailto:sage [2011/01/11(火) 21:05:28 ]
>>118
そうなのですね;

なんとか、最初の保存位置を指すカウンタを用意し、それのみ一緒にソートして
その値の要素数と入替える事を思いつけて今回は解決できました。ありがとうございました。



121 名前:117 mailto:sage [2011/01/11(火) 21:07:00 ]
>>119
あー・・値ではなく構造体のポインタを・・でしょうか。
勉強になります。ありがとうございました。

122 名前:デフォルトの名無しさん [2011/01/14(金) 22:45:35 ]
質問させてください。
windows VC6.0 MFCで通信プログラムを作成しています。
無線ルータでPBCで複数台設定したときにIP(MACアドレス)をリスト化してユーザが判断して
どの機器と接続するかを選択できるプログラムを作りたいのですが、これはTCPでしか出来ないですよね?
実装させるとすればどの様にすればよろしいでしょうか?
socket() (1)ソケット生成

bind() (2)ソケット登録

listen() (3)ソケット接続準備 (仮に5台まで受け付ける)

accept() (4)ソケット接続待機 ←接続要求

read()/write() (5)受信/送信 ←データ→クライアント側プログラム

close() (6)ソケット切断

listenで複数台の受付をして、acceptで接続する所までは分かったんですが、
これだと一番最初に見つかった相手としかコネクトしないっぽいので困ってます。

123 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 01:12:49 ]
全部acceptして要らないものをcloseする

124 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 22:47:51 ]
class Foo{
int x_;
int y_;
Bar& bar;
Baz& baz;
public:
Foo(int x, int y) : x_(x), y_(y), bar(x,y), baz(bar){};
};
こういうクラス作りたいんですが、bazの初期化の仕方が分かりません。
初期化子リストが順番通りに初期化してくれるわけでもないらしいです。
参照をポインタにするしかないんでしょうか

125 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 22:51:45 ]
bar(x,y)この時点でコンパイル通らないと思うが…

126 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 22:56:44 ]
えーと、Bar&をBarにでもして下さい。
参照が複数あったときに、どの順番で初期化すればいいかわからないです
Bazのoperator()()がオーバーロードされてて、
(*baz)()みたいな使い方が気持ち悪いので参照を使いたいのです

127 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 23:01:20 ]
そんな理由なら
bazを使うときに
Baz& b = *baz;
b();とでもすりゃいいんじゃないの?

128 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 23:07:34 ]
あーなるほど。ありがとう御座います。そのやり方でいきます。

129 名前:デフォルトの名無しさん mailto:sage [2011/01/15(土) 23:09:24 ]
posixの非同期IOについて質問です.

1.「open」でファイルオープンしてfd取得
2.「aio_read」でファイルリード要求(スレッドによるコールバック指定
3.(以下呼び出されたコールバック関数)
4.aiocb構造体で指定したバッファaのポインタを一時変数に保存
5.aiocb構造体に新たなバッファbと新たなファイルオフセットを設定して,再度「aio_read」でファイルリード要求
6.非同期で読み込んだバッファaを処理
で処理をしていますが,ファイル終端の検出をどのように行えばよいのかわかりません
あらかじめファイルサイズを取得しておくしか方法がないのでしょうか?

130 名前:129 mailto:sage [2011/01/16(日) 00:13:08 ]
自己解決しました.
aio_returnでread/write等の戻り値と同等のものが得られました



131 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 20:57:09 ]
Cからc++に移行真っ最中の者です。
基本的なクラスの書き方は理解して
子供クラスの継承当たりまで理解しました。

C+WINAPIで、簡単なGUIアプリは組めたのですが
クラスを交えてのGUIアプリ開発となるとさっぱり検討もつきませぬ
要はオブジェクト指向が理解できていないのですが、CからC++に進んで方はどんな勉強しました?
既存のプログラムを書き起こしたりしたんですかね?

周りにプログラムわかる人居なくて孤独な独学なんで、
俺はこうやった、とかこうやるといいんじゃねとか、進むべき道を教えてください。

132 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 21:04:14 ]
俺は昔懐かしいBorlandC++3.1に付属していたObjectWindowsライブラリを使いながら覚えた
あんまり参考にならないか

133 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 21:14:53 ]
俺がC→C++へ移行しようとしたときはクラスの意味が全然わかんなくて。
Javaを1年くらいやってようやくクラスを理解した。

134 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 22:29:49 ]
>>131
サンプルソースたくさん読んで、色々簡単なものををたくさん書けばすぐに覚える。
ようは慣れ

135 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 22:39:46 ]
いまさらC++か。

136 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 22:43:49 ]
>>131
素直にライセンスの緩いGUIライブラリ探していじってみる、
という方法もある。
VCやMinGWならLilyとか日本語でわかりやすかった
英語だがwxWidgetsとかすごく有名らしい
言語がC#とかならもっと楽チンすぎるが

137 名前:デフォルトの名無しさん mailto:sage [2011/01/16(日) 22:59:06 ]
WTLがオーポンソースなんだからそれ読めば?
Microsoftが提供するC++なフレームワークですよ。

138 名前:デフォルトの名無しさん mailto:sage [2011/01/17(月) 11:26:43 ]
GUIは機種依存だから覚えても意味無いよ。
むしろコマンドの方がスクリプトとか使えて応用性がある。
テキストエディターとかつくりたいのなら別だが。

139 名前:131 mailto:sage [2011/01/17(月) 22:48:01 ]
皆さんありがとう。

LilyとWTLを導入して少し読んでみました。
まだ難しくて良く読み解けませんが、オブジェクト指向を理解する教本にはなりそうです。

あまりプログラムの時間も取れないのですが
めげずに一日ワンプログラムの精神で頑張りたいと思います。

140 名前:デフォルトの名無しさん mailto:sage [2011/01/17(月) 23:04:50 ]
>>139
あまり大きなソース読んでも挫折するぞ、小さいのからいけ



141 名前:デフォルトの名無しさん [2011/01/20(木) 18:59:56 ]
codepad.org/nF5Gtpyt

444〜505行目までのzahyo()が思うように動いてくれません。
やりたいこととしては、
zahyo[j][0][0or1or2]に直方体のx,y,z座標が一番小さい部分、
zahyo[j][1][0or1or2]に直方体のx,y,z座標が一番大きい部分、
の値を後順走査によって求めていきたいのですがわかりません。

どなたかよろしくお願いします。


142 名前:デフォルトの名無しさん mailto:sage [2011/01/20(木) 19:11:04 ]
思うように動くようにするのがお前の仕事だろうが

143 名前:デフォルトの名無しさん mailto:sage [2011/01/21(金) 06:07:56 ]
どこかでみたコードだな
グラフ探索だったか?

144 名前:デフォルトの名無しさん [2011/01/21(金) 18:09:32 ]
>>143
そうです!

どうやればいいのかさっぱりで・・・

145 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 01:56:08 ]
32bit単精度浮動小数点を
32bit(16bit.16bit)の固定小数点に変換するにはどうすればいいですか?


146 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 01:57:17 ]
(int)(x * 65536)

147 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 01:59:13 ]
>>146
え、こんなシンプルでいいんですか?


148 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 02:05:06 ]
少しは自分の頭使え


149 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 02:14:37 ]
>>147
どのへんがダメだと思うのか言ってみ
何か俺の気づいてない問題点があるのかもしれんし

150 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 02:32:58 ]
>>149
指数部と仮数部と符号を取り出して云々だと思っていたので
混乱しています



151 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 03:53:24 ]
それは・・・
手間に見合う効果があるとは思えないが

152 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 07:29:32 ]
>>150
とりあえず>>146が何をしてるのかは分かるのか?

153 名前:デフォルトの名無しさん mailto:sage [2011/01/22(土) 08:29:41 ]
>>150
「指数部と仮数部と符号を取り出して云々」という処理はとても
汎用性が高いので、マシンコード一発で出来る。
FPUを持たないCPUの場合はキミが言った通り、「指数部と仮数部と
符号を取り出して云々」という処理をCコンパイラが生成してくれる。

154 名前:デフォルトの名無しさん mailto:sage [2011/01/23(日) 21:51:12 ]
ldexp()とfrexp()がある

155 名前:145 mailto:sage [2011/01/24(月) 00:07:58 ]
シンプルに考えればいいんですね・・・
とりあえず65536は少数部を2バイト分整数にもってきていると、
ひとまず解決とします。
ありがとうございました

156 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 19:03:03 ]
STLを使う場合って
vector<int> a
見たいに宣言しますが、newを使わなくてもいいのはどうしてなんですか?
クラスなら必要だとおもったんですけど。。。

157 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 19:15:15 ]
うむ
スタックとヒープで検索をかけるとわかるかもしれない
わからないかもしれない

158 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 19:33:20 ]
>>156
クラスでもintでも同じだよ。

その宣言て実行文中?ならそれは自動変数。
自動変数はそれの宣言があるブロックが終わるとその変数が消える。
そういう寿命の変数でいいなら自動変数で使えばいい。

newしたものはdeleteするまで消えない。
そういう寿命の変数が欲しいならnewする。

159 名前:デフォルトの名無しさん mailto:sage [2011/01/25(火) 19:53:42 ]
>>157,158
自動変数でぐぐったら理解できました。
ありがとうございました。

160 名前:デフォルトの名無しさん mailto:sage [2011/01/26(水) 20:54:50 ]
CHoge自体はライブラリ内のクラスで、内部はいじれないものなのですが、

class CHogeEx : public CHoge
{
  CHogeEx() {}
  virtual ~CHogeEx() {}

  void Func()
  {
    // CHoge内のprotectedのメンバ変数やメンバ関数にアクセス
  }
};

という、自身にはメンバ変数を持たない派生クラスを作った場合、

void Test(CHoge* pHoge)
{
  ((CHogeEx*)pHoge)->Func();
}

のように、CHogeのポインタをCHogeExにダウンキャストして
追加したアクセス関数を呼ぶことは、やっても構わないものでしょうか?




161 名前:デフォルトの名無しさん mailto:sage [2011/01/26(水) 21:59:23 ]
ダウンキャストがどういうことが分かってるならいいんじゃね?

162 名前:デフォルトの名無しさん mailto:sage [2011/01/26(水) 22:04:39 ]
やってもいいよ。

163 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 00:04:00 ]
ANSI文字セットは時代遅れなの?
みんなwchar_t とか WCHAR とか LPWSTR とか L"文字"って書いてるの?

164 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 00:16:47 ]
WCHARとかは必要な場合にしか使わない


165 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 22:46:32 ]
>>163
windowsだったら、wchar_tとかWCHAR使ったほうがいいよ。

166 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 22:51:16 ]
utf8世代なんで、wとかlで始まるもの使ったこと無い

167 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 23:06:04 ]
struct CUBE{
int x;
int y;
int z;
}

void* p;

static void g(void *p);

main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}

g(void *p){
p = c;
}

これでpをcと同じ感覚で使える……と思いきや
printfのところで「NULLポインタを通じた参照」となってしまいます。
pはグローバルなのになぜでしょうか?

168 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 23:08:49 ]
>>167
それ以前にコンパイル通る?

169 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 23:26:23 ]
void*pって宣言してるけど…
int *pじゃない?

170 名前:デフォルトの名無しさん [2011/01/28(金) 00:05:31 ]
CPoint CPoint::operator+(const CPoint& obj)
{
CPoint tmp;
tmp.m_x = m_x + obj.m_x;
tmp.m_y = m_y + obj.m_y;
return tmp;
}

// +=演算子オーバーロード
CPoint& CPoint::operator+=(const CPoint& obj)
{
m_x += obj.m_x;
m_y += obj.m_y;
return *this;
}

この2つの違いはなんですか?  +=をオーバーロードするときはポインタを返さないといけないんでしょうか?



171 名前:デフォルトの名無しさん [2011/01/28(金) 00:10:13 ]
>>167
キミがやりたいことはこのように記述する。

static void g(void **p);

main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(&p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}

g(void **p){
*p = c;
}


172 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 00:21:55 ]
>>170
ちっがーうよ。 + と += の機能のちっがーいを考えてごっらーんよ(ケント・デリカット風に)。

int a,b; の時、
a + b の返却値は計算結果のコピー。
だから ( a + b ) = c のようには記述できない(わかりやすくするためにあえて括弧をつけてるよ^^)
一方、a += b は a = a + b で、返却値は a それ自身。
だから、 ( a += b ) = c; のように書くと、結局、 a = c; と同じ結果になる。

このような組み込み型の挙動をクラス型についても実装しようとするとこうなる。
でも本当は
CPoint CPoint::operator+(const CPoint& obj) は
CPoint const CPoint::operator+(const CPoint& obj) と、
返却値に const をつけたほうがいいんだな。そうしないと、

CPoint a,b,c;
( a + b ) = c

でエラーが出なくなっちゃう。

173 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 01:25:21 ]
うへ voidてNULLしか入らないのかと思ってた。

174 名前: ◆QZaw55cn4c mailto:sage [2011/01/28(金) 03:24:26 ]
>>171
g() の中の c ってなんですか?

>>167
こういう意味ですか?
codepad.org/ruqcsMWt

175 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 03:48:55 ]
>>171
ゴミはすっこんでろ

176 名前:デフォルトの名無しさん [2011/01/28(金) 06:30:33 ]
C++のコンパイルがgccでうまく通りません。

www.hm-lab.net/archives/236
のソースを sample.cpp とつけて保存して

g++-3 sample.cpp

と打つと以下のエラーになってしまいます。
sample.cpp:6:19: tchar.h: No such file or directory
sample.cpp: In function `int _tmain(int, TCHAR**)':
sample.cpp:21: error: `_T' undeclared (first use this function)
sample.cpp:21: error: (Each undeclared identifier is reported only once for each
function it appears in.)
sample.cpp:33: error: `_tprintf' undeclared (first use this function)

tchar.h のファイルの場所を探して

CPLUS_INCLUDE_PATH に追加したり
-l オプションでディレクトリの位置を追加してもエラーメッセージが変わりませんでした。

何が間違っているのでしょうか?

177 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 09:33:52 ]
>>174
これが最小修正

> CUBE c_, *c= &c_;

> g(c);

> g(void *c){

178 名前:デフォルトの名無しさん [2011/01/28(金) 22:27:42 ]
以下のコードのSAがうまく動いてくれないんですが、、

codepad.org/8Dha99DZ

C言語でプログラムを組んでみたのですが、
295行目から430行目あたりまでを実行すると、なぜか解が悪い方向にしか進みません。
どなたか解決法をよろしくお願いします。

それ以降の行数でも同じような現象が起きてしまいます...orz



179 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 22:33:02 ]
mainながw

180 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 22:35:11 ]
>>178
突然こんな量のコードだされても誰も答えられん
もっと絞るか、原因がわからなければ
もういっそ一度最初から作り直したほうがいい
問題は分割してとりかかるべき



181 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 23:50:34 ]
これはJavadoc並の解説が欲しいww

182 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 00:23:00 ]
要所要所でprintf()で変数内容表示したりして追っていけば?
この長いコードで質問がこんな大雑把じゃぁねぇ。

せめてエラーが出ているのか、実行中にエラーが出ているのか
コンパイル時にwarrningが出ているのか、それともコンパイル後の
実行結果の一部がおかしいのかすべてがおかしいのか、
実行中に暴走することがあるのか等
何がどうおかしいのか言ってほしい。

183 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 12:49:12 ]
教えてください

現在、在るゲームに対して DLL インジェクションを行い、d3d9.dll の CreateDevice や SetRenderState などをフックし、命令を書き換えるところまで成功しました
次のステップとして、画面上に表示されているテキストやアイコンを読み取り、それらに対してアクションを行いたいと思います
何か良い方法は無いでしょうか?

184 名前:デフォルトの名無しさん mailto:sage [2011/01/29(土) 12:53:11 ]
この板はクラッキングに対して寛容じゃ無い。自分で考えな。

185 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 23:08:17 ]
C言語だと戻り値と引数さえ一緒ならどんな関数でも同じ関数ポインタに突っ込めたけど、
C++のメンバ関数だと同じクラスのじゃないと出来ないのね。
TypeErasure使えばいいんだろうけど、融通が利かないというか何と言うか。

186 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 23:17:22 ]
std::function使えよ

187 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 23:24:10 ]
staticでいいんじゃね。

188 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 23:28:30 ]
>>186
C++0xですし。
>>187
非staticが所望なんです。

189 名前:デフォルトの名無しさん mailto:sage [2011/01/31(月) 23:42:59 ]
boost::functionは?

190 名前:デフォルトの名無しさん [2011/02/02(水) 12:06:16 ]

#define EPSIRON 1e-12
main(){
    double a;
    a=0.000000000000001;
    XXXX(a);
}

double XXXX(double a){

    if(fabs(a)<EPSIRON){
        return 0;
    }else{
        return a;
    }
}

みたいな感じでdouble型の数字がイプシロンより小さい場合に
0に丸めたいのですが、こういう場合の関数名 XXXX() は、何か
お勧めのものとか、一般的に用いられているものありますか?
ググっても、さっぱり見つけられません。
例えば RoundZero()とか ToZero()とか、私が思いつくのは
今一つセンスがありません。
詳しい人、お願いします。




191 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 10:56:18 ]
>>190
RoundZero()でいいと思うけど、どうしてもイヤなら命名すれでも見てみたら?

クラス名・変数名に迷ったら書き込むスレ。Part19
hibari.2ch.net/test/read.cgi/tech/1293201229/

192 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 17:12:17 ]
書籍を買って勉強しようと思っているのですが、
独習C 第4版以外に何かお勧めってありますか?

193 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 18:01:58 ]
推薦図書スレでCの入門書について聞くとあっという間にレスが20くらいつくぞ。
そして対外はK&Rがどうこういう話に収束するぞ。
だからいつもこういうんだ。入門書は定番のものなら何を読んでも一緒だ、とね。
そして入門書を何冊もよむことはせず一冊読んだらとっとと
アルゴリズムなり分析設計なりちょっと小粋な数学の本なりを読め、と。

194 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 20:14:42 ]
俺はソフトバンクの「やさしいC」だな。
書籍はメインを決めて時々もう一冊を見るといった、
2種類あると結構理解が速い。


195 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 20:31:46 ]
独習みたいに分厚くて細かいところまで網羅したやつだと途中で疲れるから、
最初は薄っぺらくてちょっと足りないぐらいのから手をつけた方がいい気がする

196 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 23:59:01 ]
独習Cは厚さの割りに、細かいところに手が届かない印象
基礎を覚える程度なら十分ではあるけど

197 名前:デフォルトの名無しさん mailto:sage [2011/02/03(木) 23:59:50 ]
さぁ、盛り上がってまいりました!

198 名前: ◆QZaw55cn4c mailto:sage [2011/02/04(金) 01:53:04 ]
最初に読んだのは
www.amazon.co.jp/dp/4875931735/
まあなんでもいいんじゃないですか、一冊で終わらそうと思わなければ。

199 名前:デフォルトの名無しさん [2011/02/04(金) 04:41:33 ]
あるコマンドがインストールされているか、すなわち使えるかどうかを
Cプログラムから調べる方法をおしえてください 。
コマンドラインからであれば、そのコマンドをうってエラーが帰ってくるかどうかで分かりますが、
プログラム内からはどのように調べればよいのでしょうか?
環境はUbuntu10.10 gcc4.4.5です。

200 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 05:02:38 ]
環境変数のpathに有るファイルを走査すればいいと思うよ



201 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 10:06:17 ]
>>199
system()で呼んでみて、戻り値をチェック。

202 名前:デフォルトの名無しさん mailto:sage [2011/02/04(金) 12:36:42 ]
コマンドラインでもwhich使えよ

203 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 00:51:37 ]
スキルアップしたくて、大学春休みだしOSかドライバか作れるようになるように勉強しようと
思ってるんだけど、どっちの方がとっつきやすいですか?
OSなら「30日でできる! OS自作入門」、ドライバなら「Windows Vistaデバイスドライバプログラミング」
買おうと思ってる

204 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 03:03:31 ]
>>203
とっつきやすいという点ではOS自作のほうが楽だろう。
どこから作り始めてもいいし、好きな流儀で作っていいし、サンプルも豊富。

205 名前:デフォルトの名無しさん [2011/02/05(土) 03:25:28 ]
C言語でオセロゲームを作るとき、<stdio.h>(標準入出力ヘッダーファイル)だけで
作ることは可能ですか?

206 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 03:47:43 ]
なぜstdio.hだけと制限するのか知りたいとも思わないが
標準Cライブラリだけで作られているオセロゲームは存在しているよ

207 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 03:55:24 ]
>>204
ありがとう、OSの方がとっつきやすいですか。
ドライバ作れるようになった方が便利そうだけど、OS自作のほうが響き的にかっこいいし
OS自作の本買ってやってみる。さっそくポチった

208 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 08:16:28 ]
値を参照したいだけの引数は、どのようにするのがベターでしょうか?
基本的には3か5だろうと言うのはわかるのですが…。

1. void hoge(int piyo) (現在使用してますが、ベターではないですよね)
2. void hoge (int * piyo)
3. void hoge (const int * piyo)
4. void hoge(int & piyo)
5. void hoge(const int & piyo)
6. その他

また、理由も添えていただけると助かります。

209 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 08:53:07 ]
>>208
渡すのが整数型なら、1でいいよ。5でもいいけど、インライン展開されない場合は寧ろコストが掛かる。
クラスか何かを渡すなら、逆ね。

210 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 15:32:06 ]
低俗な質問ですいません。
csvファイルを読み込んで表示しようとしても文字化けしてしまいます。
表示のところに何か問題がありますか?ご指摘ください!

#include <stdio.h>

int main(int argc,char *argv[])
{
FILE *fp;
int ch;

fp = fopen(argv[1], "r");

if(fp == NULL) {
printf("\aファイルをオープンできません。\n");
}
else {
while ((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}

return(0);
}




211 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 15:38:51 ]
>>210
csvの文字形式をシフトJISにでも変換したらどうだろう

212 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 15:40:46 ]
1バイトづつじゃなくてバッファにためこんでprintfで%sで表示してみる

213 名前:デフォルトの名無しさん [2011/02/05(土) 17:38:09 ]
windowsアプリを作る場合に
WinMain()とmain()は
名前と引数以外には違いがないと考えていいのでしょうか。

214 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 18:18:57 ]
見た目わね

215 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 18:37:08 ]
>>210です。fscanf使ったらできました。配列に格納したんですけど、
構造体を作ってそこに格納することも可能ですか?

216 名前:213 mailto:sage [2011/02/05(土) 18:38:09 ]
>>214
回答ありがとうございます。

たいへん恐縮ですが重ねて質問させてください。
試した限りはWinMainをmainに書き換えても同じように動作するのですが、
同じように動作しているように見えても実は違いがあるということでしょうか。
その場合、その違いがプログラムに深刻な影響を及ぼすケースはあるのでしょうか。

217 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 21:58:20 ]
>>216
標準ライブラリだけしか使わないなら大差ないよ。
GUIを含めて色々やろうと思い出すと、問題になるけど。

218 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:00:37 ]
>>215
なんで>210がダメでfscanf()で巧くいったのか小一時間問い詰めたいけどまぁいいや。
勿論、fscanf()で構造体に直接格納することも可能。但し、%sを使う場合は%20sのように制限することを考えた方がいい。
更に言えば、どうせ色々考えるならfgets()で取り込んだものをsscanf()でばらす方がいいかもしれない。
つーか、割と普通にそうする。

219 名前:デフォルトの名無しさん [2011/02/05(土) 23:45:01 ]
クラスののメンバー変数に

int NUMと int hoge[NUM]という配列を定義したいのですが、単純にやるとできません。
なにかやる方法はありますか?

220 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 23:54:25 ]
性的にhogeの配列が決まる、つまりNUMがコンパイル時定数であるというのなら

class Victory {
static int const NUM = 10;
int hoge[ NUM ];
};

class Win {
enum{ NUM = 10 };
int hoge[ NUM ];
};

で可能。NUMの値をコンストラクタで取得したいとか言うのなら無理



221 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 00:00:49 ]
コンストラクタで取得したいです。

ポインタのみ定義して、コンストラクタで動的確保するしかないですかね?

222 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 00:02:13 ]
vector使えばいいじゃん。

223 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 00:02:49 ]
stlは使えないんす

224 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 00:04:19 ]
>>221
無理。動的確保しかない。
っていうか、>>222のいうとおり、vectorで。超便利。かなり早い。
一部の型については特殊化もされているので激速。

225 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 00:41:38 ]
いや、vectorのあの特殊化は有害だよ。
普通の配列のように先頭要素へのポインタを得て、それを介して扱うことが不可能になるのだから。

226 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 01:45:39 ]
vector<bool>さんの悪口はやめるんだ

227 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 07:18:35 ]
実装によってはbasic_stringとかも特殊化されてるよ。

228 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 18:00:30 ]
>>224
あれってboolさんだけじゃなかったのか

229 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 19:59:03 ]
fstreamクラスのseekgとseekpって名前が違うだけでまったく同じ機能らしいですが、
なんでわざわざそうしたのですか?
seekっていう関数ひとつだけ用意した方が分かりやすい気がしますが。

230 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 20:10:10 ]
全然違うがな



231 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 20:50:03 ]
違うんですか・・・。
もう少し勉強してみます。

232 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 21:37:36 ]
どこの情報にまったく同じなんて解説があるんだろう

入力ストリームと出力ストリームの位置が混在したら困るやん

233 名前:デフォルトの名無しさん mailto:sage [2011/02/07(月) 17:11:59 ]
C++初心者です。
Cで構造体変数を初期化する際によくmemsetで全てのメンバ変数をまとめてゼロクリアしていたのですが
C++でクラスを利用する場合はコンストラクタでメンバ変数一つ一つに初期値を代入する以外に、よく使われる便利な方法というものは無いものでしょうか?

メンバ変数が多いクラスを初期化する際にコンストラクタが長ったらしくなったり、
メンバ追加の度にコンストラクタにも初期化処理を追加しなければないのに慣れず
初期化し忘れたりしないか、とか考えると何か他に便利な方法とか用意されてないのかな?と気になりまして質問させていただきました。

234 名前:デフォルトの名無しさん mailto:sage [2011/02/07(月) 17:41:44 ]
>>229
そういう意味か
例えばifstreamではseekpとseekgは事実上同じ意味
しかしstringstreamは実際プログラムを書いてみればわかるが、seekpとseekgは
それぞれ違うポインタを指している
継承上の問題だと思うよ

235 名前:デフォルトの名無しさん mailto:sage [2011/02/07(月) 19:39:09 ]
>>233
外部で構造体を初期化するのと、クラスのコンストラクタで自分自身を
初期化するのでは意味が違うような気もするけれど、コンストラクタでなにもしないで、
C風の使い方をすることは出来ます。
コンストラクタ内での定義については、まじめに定義して下さい。

なお、new されたオブジェクトだけなら、operator new を
override してクリアするという手段は(一般的とは言えませんが)あります。

236 名前:229 mailto:sage [2011/02/07(月) 23:36:13 ]
>>234
ありがとうございます。

seekpとseekgはfstreamだけのものでなくて、
同じくiostreamを継承しているstringstreamなどでも定義されている、
ということを知らなかったのが混乱の原因だったようですね。

基本的には入力ストリームの出力ストリームの位置は異なるけど、
fstreamの場合はそれらはファイルポインタを表しており、
ファイルポインタは1つしかないので、
たまたま常に同じ場所を指すことになっている、
ということでしょうか。

237 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 00:31:57 ]
>>236
ifstream、istringstreamにはseekpはない
ofstream、ostringstreamにはseekgはない

fstreamにはseekp、seekgの両方があるので混乱してるのでしょう
ご存じの通りファイルポインタは1つしかないのでseekpもseekgも同じ意味になります

ところがstringstreamは読み込みと書き込みを別々に行っているため、seekpとseekgは
使い分けなければなりません

238 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 00:41:09 ]
ideone.com/szDhS
csvファイルをコマンドラインから読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。

読み込むcsvファイル↓

01A,aさん,f,1.1,1.1,1111
02B,bさん,m,2.2,2.2,2222
03C,cさん,f,3.3,3.3,3333
04D,dさん,m,4.4,4.4,4444
05E,eさん,f,5.5,5.5,5555
06F,fさん,m,6.6,6.6,6666

239 名前:229 mailto:sage [2011/02/08(火) 02:35:44 ]
>>237
ご丁寧にありがとうございます。
疑問が解消しました。

質問に答えてくださった他の皆様も本当にありがとうございました。
とても勉強になりました。

240 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 03:57:54 ]
>>238
先ずは警告が出ている113行から直そうか。



241 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 04:04:35 ]
>>238
25行目 return 0; 追加
27行目 for(〜) ;  このセミコロン不要
113行目 C==EOF
For(〜){ } の位置関係訂正

ideone.com/dP2EE
一応訂正しておいた。見てくれ。

242 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 19:43:08 ]
>>240 >>241
丁寧にありがとうございます!おかげさまでうまくいきました!

243 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 21:08:19 ]
int a;
int main()
{
return 0;
}
このaは
スタック領域ですか?
静的領域ですか?
コンパイラ依存ですか?

244 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 23:30:33 ]
グローバル性的領域でしたっけ

245 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 00:26:21 ]
スタックじゃない。データ領域。
mainが実行される前に確保される領域。

たとえば、
struct SomeClass
{
SomeClass()//コンストラクタ
{
>>breadpointB
}
}

SomeClass a;
int main()
{
>>breakpointA.
}
としてデバッグ起動すると、SomeClassのコンストラクタ
がmainよりも前に実行されることが確認できる。

246 名前:243 mailto:sage [2011/02/09(水) 00:55:24 ]
>>245
ありがとうございます
データ領域は、スタックともヒープとも静的領域とも違うのですか?

247 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 01:13:51 ]
ああ、静的領域と呼ぶのが普通ですね。
訂正します。

248 名前:243 mailto:sage [2011/02/09(水) 01:24:34 ]
>>247
ありがとうございました

249 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 03:31:55 ]
スタック・ヒープってややこしい言葉だよな

メモリ領域としてのスタックとヒープ
データ構造としてのスタックとヒープ

前者のスタックは後者の構造をしているけど
ヒープは前者と後者で全く異なる概念だし

250 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 04:41:49 ]
if(){処理1}
else if(){処理2}
else{処理3}
のようにした時、処理1と処理2がそれぞれ終わった後、処理3に飛んでほしい場合は
どうすればよいのでしょうか?



251 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 04:43:38 ]
最後のelse書かなきゃいいじゃん

252 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 04:58:20 ]
for(;;){
 if(){処理1}
 else if(){処理2}
 else break;
 処理3
 break;
}
こっちでない

253 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 08:35:14 ]
>>250
どうなって欲しいのか条件を真理値表に纏めろ。先ずはそれからだ。
例えば、>250のコードだとこうなる。
文面に従えば、処理3は処理3'のようになって欲しいのか? それなら>251だが。
条件1 条件2 処理1 処理2 処理3 処理3'
 真   真   ○   ×   ×   ○
 真   偽   ○   ×   ×   ○
 偽   真   ×   ○   ×   ○
 偽   偽   ×   ×   ○   ○

254 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 08:39:55 ]
>253の伝でいけば、>252はこうなるね。
条件1 条件2 処理1 処理2 処理3
 真   真   ○   ×   ○
 真   偽   ○   ×   ○
 偽   真   ×   ○   ○
 偽   偽   ×   ×   ×
これだったら意味不明な無限ループなんて書かずに
if (条件1 || 条件2) {
if (条件1) 処理1;
else 処理2;
処理3;
}
でいいじゃん。

255 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 08:47:49 ]
if(){処理1処理3}
else if(){処理2処理3}


256 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 08:51:19 ]
処理3が関数でインライン展開され得るならそれがベストかも知らん。

257 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 09:05:24 ]
crc32 の値が 0 になることってありますか?

258 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 11:25:10 ]
FizzBuzz問題もそうだけど、
案外>>255みたいに同じコード(ここでは処理3)を2度書くケースって多いんだよね^^

259 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 11:28:08 ]
^^

260 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 14:49:11 ]
>>254
それ条件1が2回評価されるで



261 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 15:06:33 ]
そんなもん目的次第でどうにでもできるわ

262 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 16:03:57 ]
イテレーターペアーを入力とする関数の出力をイテレーターに
したいのだが
template<typename A.typename B,typename C >
void a(A abeg,A aEnd,B bbeg ,B bend,C cbeg,C cend ){
....
}
入力が a,bで出力がcとしてこれでいいのか?

263 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 16:17:06 ]
コンテナを操作するアルゴリズムで迷ったときは
STLで似通ったアルゴリズムのインタフェースを参照してみるとよいでしょう。
たとえばtransformは二つの範囲から一つの範囲へ出力する機能を提供します。

264 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 16:51:27 ]
std::transformはオーバーロードされてて2種類あるな

265 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 00:27:10 ]
out:; って何ですか?

266 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 00:31:36 ]
ラベル

267 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 05:00:59 ]
if(条件1) 処理1
else if(条件2) 処理2
else goto Label;
処理3
Label:;
でいいのにgoto絶対禁止教って大変だな

268 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 11:08:44 ]
gotoは便利だからって素人が使うとスパゲッティになっちゃうからな

269 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 11:22:33 ]
do {
if(条件1) 処理1;
else if(条件2) 処理2;
else break;
処理3;
} while(0);

270 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 18:34:43 ]
>>267
小さいプログラムしか組まない素人にはgotoは便利だな。
まあ、がんばれw



271 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 18:49:56 ]
自称大きいブログラムを作ってる人は言うことが違いますね^^

272 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 00:12:47 ]
当然だ! そんなことも分からないのか

273 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 08:58:41 ]
>>270
構造化例外が無い時代には、エラー処理をgotoで書くと便利だったのは認めるけどな。

274 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 11:58:40 ]
>>273
例外関係なく、遙か昔にしかgoto使ったことないわ

275 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 14:12:45 ]
>>267>>269ってコンパイルしたら同じになる?

276 名前:デフォルトの名無しさん mailto:sage [2011/02/14(月) 10:57:38 ]
>>275
これをコンパイルしてみた。
--
codepad.org/K7iqjR7q
--
$ gcc -S foo.c -DTYPE=0 -o foo.0.s

$ gcc -S foo.c -DTYPE=1 -o foo.1.s

$ diff -uw foo.?.s
--- foo.0.s 2011-02-14 10:54:09.562500000 +0900
+++ foo.1.s 2011-02-14 10:54:18.421875000 +0900
@@ -18,7 +18,6 @@
call _proc2
L3:
call _proc3
-L4:
L5:
leave
ret

$ gcc --version
gcc (GCC) 4.3.4 20090804 (release) 1
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


$
--
つまり、事実上全く一緒。

277 名前:デフォルトの名無しさん mailto:sage [2011/02/15(火) 06:24:21 ]
低レベルで書いてた人ほどgotoには拒否感がないような気がする

278 名前:デフォルトの名無しさん mailto:sage [2011/02/15(火) 07:22:52 ]
いずれにしても絶対否定は愚かしい

279 名前:デフォルトの名無しさん mailto:sage [2011/02/15(火) 20:38:36 ]
プログラム何て組んだことがない、ソフトを起動させた事もない人間なんだが
C++でプログラム(主にゲームになるんじゃないか)組むには何をしたらいい?
参考文献を買う?サイト巡って「入門編」みたいのやっていく?
お前ら一番初め何やった

280 名前:デフォルトの名無しさん mailto:sage [2011/02/15(火) 22:58:52 ]
ゲーム作るならHSPでいいんじゃないか?
昔みたいにアセンブラじゃなきゃ処理速度おっつかないみたいな世界じゃなくなったし。



281 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 14:02:17 ]
>>279
プログラミングの基礎は置いといて
ゲームを作るとなると主に画像の表示と音楽の再生が辛いところなんだが、
Dxlibっていうライブラリがあるからそれを使うのがとても楽な道。
Dxlibは使用者も多く、作者もかなり活動的だからサンプルもかなり多いし、初心者向けの質問掲示板もあったりする。
主に2Dゲーム用だが3Dも普通にいける。
ただ完全に3D用ならもっといいライブラリがあると思うけども。

282 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 16:45:16 ]
Basicにアセンブラまじぇまじぇしてた時代、何もかも皆懐かしい

283 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 20:08:35 ]
#include <stdio.h>
struct data{
int menba1;
char menba2[];
}hensu,mozi;

int dainyu(struct data *);
char moziretu(struct data *);
int main()
{
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1);
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
int dainyu(struct data *p)
{
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
変数は上手くいくんですけど文字列が入力できなくて失敗してしまいます
結果 文字列--文字列は
どうか教えてください。

284 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 20:16:43 ]
menba2の配列の大きさは?

285 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 20:33:02 ]
指定していませんでしたけど、試しに[32]にしましたが結果は同じでした

286 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 20:52:52 ]
scanf("%d\n",&p->menba1);
かな。


287 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:04:02 ]
試してから言えw

288 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:10:13 ]
#include <stdio.h>

struct data{
char menba2[];
}mozi;

char moziretu(struct data *);
int main()
{
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
moziretu関数に問題があるんだと思って文字だけにしたんですけどそしたら上手くできました
>>286
中でhensuへの命令と混じってしまったんでしょうか?(イメージですけど)
正直どこがどう間違ってるのかよくわからないんですけど教えて頂けないでしょうか?

289 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:24:15 ]
scanf()で整数を読み込むとバッファに改行文字が残る
その後に文字や文字列を読み込むと、その改行文字を読み込む

290 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:38:44 ]
>>287
お前にはわからないからそう言ったのだろうが、scanfを見ればだいたいわかる。
他の部分に問題が無い事までは目を通さなかったので、「かな」をつけた。

まあ、精進したまえ。



291 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:45:38 ]
>>289
ありがとうございます、関数の仕組みを理解してませんでした…
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1); と書き換えたら成功しました

重ね重ね質問ばかりで恐縮ですが、関数を一つに纏めても成功したんですけど
int型で宣言した関数なのになぜgetsとか入れても正常に働くんでしょうか?
int dainyu(struct data *p)
{
printf("文字列--");
gets(p->menba2);
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
>>290
287は自分じゃないです

292 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 21:59:24 ]
>>290
>scanf("%d\n",&p->menba1);
これだと>>283が望むような実行結果にならないって言ってんだよ、バカがw

293 名前:デフォルトの名無しさん [2011/02/16(水) 22:37:49 ]
可哀想に

294 名前:デフォルトの名無しさん mailto:sage [2011/02/16(水) 22:47:40 ]
>>283のscanf("%d",&p->menba1);をscanf("%d\n",&p->menba1);にするとどうなるか

変数-- と表示される
数字入力してエンターを押す→何も表示されない
もう一度エンターを押してみる→何も表示されない
何度エンターを押しても何も表示されないので仕方ないから文字列を入力してエンターを押す
→変数の値は〜
文字列--文字列は〜
と表示される

295 名前:デフォルトの名無しさん [2011/02/16(水) 23:00:34 ]
>>292
なるよ。バカ。



296 名前:283 mailto:sage [2011/02/16(水) 23:16:48 ]
>>294
バッファについて参考書読み直してるとこですが
283で何も文字を入力してないのに実行されたのはscanfで数字入力した後に押したエンターで
改行文字(NL)を取り込んだということですね
>>289さんが既にいってますけど

297 名前:デフォルトの名無しさん [2011/02/17(木) 04:31:27 ]
C++ソースのASTを取得したいのですが、
どういった方法、ツールがあるのでしょうか?
また、実際に試された方っていらっしゃいますか?

あと、GCCでは完全なAST情報を
取得できないようになっているそうなのですが、
本当でしょうか?また、どの程度の情報までなら得られるのでしょうか?

ここ数年気になっていた内容です、よろしくおねがいします。

298 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 04:51:45 ]
アスパラギン酸アミノ基転移酵素がどうかしたのか?

299 名前:デフォルトの名無しさん [2011/02/17(木) 10:34:57 ]
はい、C++ソースさんに黄疸が出ていて、
肝臓が悪いんじゃないかと思うので検査してあげたいのです。
ってちがいます。↓こっちです。
ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E6%A7%8B%E6%96%87%E6%9C%A8
よろしくおねがいします。

300 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 12:56:11 ]
web制作の人はC++やCを学習することは無駄になりますか?
Javaを覚えればTomcatでjsp出来ますし・・C#ならasp.netでMVCでWEBサイト構築できますし



301 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 13:54:22 ]
勉強自体が無駄になることはないだろうけど
WebアプリをCやC++で書くことは多分ない。非効率だから。

302 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 17:30:50 ]
とても似ているとはいえ、やはり細かいところで違うので、Cじゃなくて素直にphpやれという気はする。
サーバー側のコードはC++で書いたことがあるが、確かにあまりないかもね。

303 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 04:02:15 ]
俺は恋文をC++で書ける

304 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 15:29:12 ]
std::cout << "セクロスしたい" << std::endl;

305 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 16:38:26 ]
if ( !you->canAccept(me) )
delete me;

306 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 17:58:56 ]
else
goto hotel;

307 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 21:20:41 ]
hotel:
if ( you->age < 18 )
{
police.arrest(me);
return -1;
}

308 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 22:18:22 ]
class police
{
public:
void arrest(Porson& P)
{
P.parent.call();
}
}

309 名前:デフォルトの名無しさん mailto:sage [2011/02/19(土) 00:06:24 ]
これがオブジェクト指向(キリ

310 名前:デフォルトの名無しさん mailto:sage [2011/02/19(土) 02:43:07 ]
>>300
2chの鯖の負荷が大きくなったとき、一部をCに変えたはず。
そんな訳で、負荷が大きいサーバのクリティカルな部分の移植とかならありえるかも…
まぁ、めったに無いと思うけどね。



311 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 15:51:03.14 ]
ある既存のクラスAを引数にして処理する関数funcがあるとして、
クラスAにメンバ変数xを1つだけ追加したクラスBも同じfunc関数で扱わせたい場合、
普通にBがAを継承しても、当たり前かもしれませんがfuncはxを処理してくれません。
B用のfuncを別に用意せず、funcの少しの改変で(テンプレート等で)xを処理するように解決する方法がありますか?

312 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 15:59:33.89 ]
func(A* p)
じゃダメなの?

313 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 16:09:41.52 ]
OOPの原則に立ち返れば
クラスAとクラスBはそれぞれfunc関数を
メンバに持つべきようなきもするけど。

そうしておかないと
処理対象が増殖していったとき
すぐにハッテン^h^h^h^hハタンする。

314 名前:311 mailto:sage [2011/02/26(土) 17:46:50.70 ]
>>312
それだとxが無いよとコンパイラに叱られます。
>>313
funcが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況があります。
できる人が見たら設計が悪いと指摘されるかもしれませんが・・・
設計を見直さず、デザパタ等でさくっとその場しのぎができないかと思いまして。

315 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 17:52:21.15 ]
テンプレートメソッドでいいんじゃねーの?
どんなことしたいのか知らんけどこれが分かりやすいと思う。

316 名前:311 mailto:sage [2011/02/26(土) 17:56:47.98 ]
class A {
public:
 void f(int) {}
};
class B : public A {
public:
 int x;
 void f(int _x) { x = _x; }
};
void func(A* p, int x) {
 p->f(x);
}
int main() {
 A a;
 B b;
 func(&a, 1);
 func(&b, 2);
 return 0;
}
↑こんなその場しのぎでコンパイル通ったのですが、これでいいのでしょうか・・・?
>>315
テンプレートメソッドですか。調べてみます。ありがとうございます。

317 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 18:06:30.63 ]
>>316
virtual付けてないからどちらもAのfuncが呼ばれるぞ

318 名前:311 mailto:sage [2011/02/26(土) 18:12:43.52 ]
>>317
ぎゃっほんとだ・・・とんでもないミスを。
あとこの方法だとクラスAにも無駄なメンバを追加する必要がありますね。
わざわざ仮想関数持つのも微妙な感じですね。(速度的には問題ない?)

319 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 18:20:21.70 ]
そもそもfuncの中でxを呼び出すのが無駄なきがする
同じ処理なんだからx弄る必要なんてないだろ

320 名前:311 mailto:sage [2011/02/26(土) 18:33:33.67 ]
>>319
説明不足ですみません。原則はAとBで同じ処理、Bの時はx弄る処理を途中に追加、をfuncで実現したいです。
どちみち仮想関数持つことになるなら、グローバルな関数funcをやめてテンプレートメソッドでやってみたいと思います。



321 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 21:45:11.63 ]
つRTTI

322 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 12:59:01.64 ]
>>321
if文を重ねるのは御法度だろ
仮想関数で出来る物はするべき

323 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 20:24:40.56 ]
つfuncが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況

324 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 13:44:49.55 ]
関数の定義をヘッダーに書くとmultiple defineとかでるんですけど、
これって普通ですか?

325 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 14:06:13.38 ]
普通ではありません、エラーです

326 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 14:14:45.70 ]
インクルードガード?

327 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 14:48:55.38 ]
インクルードガードはもちろんつけてありますよ。
たぶん、別々のオブジェクトファイルに同じ定義があるといけないんじゃないんですか?

328 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 15:36:05.83 ]
>>324
いつエラーが出るのか書け
コンパイルの時なのか、リンク時なのか

329 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 15:44:12.06 ]
inlineつけりゃおk

330 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 01:01:29.02 ]
>>297
GCC-XMLとか。あとclangにもそういう機能があるらしい。
すまん、どっちも自身が使ったことはない。



331 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 17:42:55.74 ]
struct hoge
{
int foo;
};
hoge h;
#define bar foo
h.bar = 100;
#undef bar

上のように一時的に別名でアクセスしたいんだけど
マクロは使いたくない、よけいなコストも掛けたくない場合になにか手はありますか?

332 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 17:58:14.38 ]
c++なら参照とか?
hoge h;
int &bar = h.foo;
bar = 100;

一時的でなくともよいなら
struct hoge
{
int foo;
int &bar = foo;
};
かな

333 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 18:45:28.51 ]
参照は実行時はポインタと同じだよね。
>331は「よけいなコスト」だと思いそう。

一時的でなくていいならunionでしょ。初期化なしで済む。

334 名前:デフォルトの名無しさん mailto:sage [2011/03/04(金) 06:37:31.11 ]
参照はポインタとは違うぞ?

335 名前:デフォルトの名無しさん mailto:sage [2011/03/04(金) 08:46:34.37 ]
ポインターだと間接参照のコードが最適化できないことがあるけど、
参照なら最適化されるからね。
参照がポインターと同等なのは引き数の場合でしょ

336 名前:デフォルトの名無しさん [2011/03/06(日) 00:01:41.77 ]
1+5*(7-2)=
↑の文字列をdllに渡すと計算結果が返ってきて、もし文字列が式ではないならエラーが帰ってくるdllを作りたいのですが
秀丸のマクロで利用できるものをお願いします

337 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 00:03:38.98 ]
自分で作りたいのに
何をお願いするんだ?

338 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 00:14:27.60 ]
秀丸のマクロで利用できるものって?

339 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 00:15:25.46 ]
秀丸のマクロからよべるDLLって意味か。

340 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 01:56:28.74 ]
秀まるおに有償で依頼すればいい。



341 名前:デフォルトの名無しさん mailto:age [2011/03/06(日) 02:02:33.14 ]
DLLを作ってメインプログラムにlibファイルを追加したんだけど、
DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。
どなたかわかる方いませんか?
test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。


342 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 02:07:11.90 ]
ここにいます。

343 名前:341 mailto:sage [2011/03/06(日) 02:35:43.86 ]
解決方法を教えてください。よろしくお願いします。

344 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 03:44:32.23 ]
extern "C"しろ

345 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 14:12:45.34 ]
リンクエラーも解決できんのにフックとな

346 名前:336 [2011/03/06(日) 14:13:49.50 ]
本当お願いします!
助けてください神様

347 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 14:18:15.02 ]
秀丸のスレで聞けばいいんじゃね

348 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 14:29:33.98 ]
>>346
ここは作ってクレという板じゃないんだよ。有償なら作ってもやるけど。
判ったら去れ。

349 名前:336 [2011/03/06(日) 14:36:02.78 ]
わかりました!
では優勝でお願いします!
何日で出来ますか?

350 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 14:42:19.66 ]
秀丸のスレで聞けばいいんじゃね



351 名前:336 [2011/03/06(日) 16:11:23.63 ]
そうですね秀丸のスレ行って見ます

352 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 17:52:59.71 ]
好きな方を使え

h = 0;
r = 乱数( 0, 99 );
for (i = 0; i < 3; i++) {
  h = h + 確率[i];
  if (r < h) {
    return 中身[i];
  }
}

t = 99;
for (i = 0; i < 3; i++) {
  if ( 乱数( 0, t ) < 確率[i] ) {
    return 中身[i];
  }
  t = t - 確率[i];
}

353 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 17:55:02.98 ]
誤爆った…orz

354 名前:336 [2011/03/06(日) 18:26:36.96 ]
やっぱりここじゃダメですか?
なんかサンプルが載ってるって言われたんですけど
サンプルからdllの作り方もわからないです
伝説の神様おねがいします><

355 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 18:29:29.28 ]
>>354
こいつに解決して貰え
そうすれば、いろいろなことに決着がつく
hibari.2ch.net/test/read.cgi/tech/1295273862/

356 名前:336 [2011/03/06(日) 18:31:31.22 ]
ちょっと待って

357 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 18:38:27.51 ]
とっとと出ていけ。二度と来るな。

358 名前:デフォルトの名無しさん [2011/03/06(日) 18:41:28.09 ]
Void_No2様の発言はどれ?
くさかべさまの発言はどれ?

359 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 18:43:28.24 ]
はあ?

360 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 18:49:09.00 ]
こういうバカにはマルウェア仕込んでやるのが良いと思う。



361 名前:336 [2011/03/06(日) 19:00:06.69 ]
やっぱだめだ
Pythonでdll作れるのかと思ったけど無理だった
本当お願いしますよ神様

362 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 19:44:16.67 ]
納期1ヶ月、20万で。
ただし、式ではないものの定義はそっちもち。

363 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 19:52:41.27 ]
秀丸よく知らんけど、>>336の式のパースくらいならDLLにしなくても、
秀丸マクロで書けるんじゃないの。

364 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 19:57:57.26 ]
>>363
良く知らないものに関して、そのマクロで書けそうって、予言者でつか?

365 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 20:05:54.65 ]
「こういう言葉でググったらいいんじゃないの」とか
「こういう方向性でも解決できるんじゃないの」みたいに
ヒントを出すと、いい加減なこというなみたいに噛み付いてくるやつって
いるけど、最初から他人にやらせるしか頭にないからそういう
反応になるんだろうな。

366 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 20:31:32.86 ]
触ってあげるなよ可愛そうな人なんだから

367 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 20:47:57.63 ]
>>362
15分で終わる作業で1ヶ月も掛かるとか初心者かよ

368 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:17:12.83 ]
>>367
じゃあ君がやってあげたまえ。

369 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:22:58.83 ]
>>368
20万はらってくれたら。

370 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:58:49.67 ]
>>367
とりあえず、吹っかけるのがこの業界のデフォルト。



371 名前:デフォルトの名無しさん [2011/03/06(日) 22:47:02.71 ]
class A{
public:
int* p;
A(){ p = new int(); }
~A(){ delete p; }
};

A func0(){ A a; *a.p = 1; return a; }

void func1( A& a ){ ... }

void main(){
func1( func0() );
};

こうすると、func0()の戻り値のA::pがfunc1に渡される前に
deleteされてしまうんですが、deleteされずfunc1へ渡す方法を教えてください。

372 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 22:50:56.82 ]
void func1( A a )
でおk

373 名前:デフォルトの名無しさん [2011/03/06(日) 23:11:44.94 ]
>>372
こういうことがしたいんです。

A func0( A a ){
A b;
b = x(a); // aをいろいろ加工してbへ
return b; }

void main() {
A a;
func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す
}

374 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:17:30.05 ]
コピーコンストラクタをつくりなさい話はそれからです

375 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:20:06.89 ]
じゃあ
A& func(A& a)で

376 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:34:24.98 ]
コピーコンストラクタを作ったらうまくいきました。
ありがとうございました。

377 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 00:46:19.18 ]
アライメントって重要ですか?



378 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 00:59:16.78 ]
unionするとき重要。
通信系のデータマッピングに重要。
その他、データマッピングにも重要。
SSEするときに重要。
スピード狂するときも重要。

379 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 01:09:45.95 ]
2番目辺りにライブラリとリンクする時も入れて

380 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 01:17:57.54 ]
>>378,379
ありがとうございます





381 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 05:58:02.17 ]
日本語を含むパスを格納してる文字列の
ローマ字だけを大文字に変換したいのですが、
それに適したライブラリや処理法ってあるでしょうか

382 名前:381 mailto:sage [2011/03/07(月) 06:02:48.93 ]
すいません、解決しました

383 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 08:04:22.80 ]
ライブラリとリンクする場合は、ライブラリが提供しているヘッダを使うから
気にする必要は無い。ライブラリ作成者は気にしなければいけない。

384 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 11:23:21.92 ]
ソート済データからの値の検索の場合
常にfindよりlower_bound使う方がいい?

385 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 12:50:24.25 ]
そもそも使い道が違う
findはその値をもつ要素を探す
lower_boundはその値以上の要素を探す
Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる
素直にfindを使うんだ

386 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 12:54:32.71 ]
俺は誰かがDLL作ってくれるまで諦めませんよ
物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ

387 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 13:41:13.44 ]
計算式が四則演算でいいなら、20万円で作ってやるよ。

388 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 14:00:32.04 ]
>>385
なるほど、値がない場合のことを考えてなかった
値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから

389 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 14:18:10.69 ]
メンバのfind使え

390 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 11:49:22.82 ]
もういいや俺は自分でDLL作ることにしましたので(キリ
分からない事をここで聞く事に方向転換しましたよ



391 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 13:44:03.42 ]
それはとても良いかんがえ

392 名前:デフォルトの名無しさん [2011/03/09(水) 14:04:16.47 ]
DLLを作るための環境を教えてください
出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください
ノートブックなので容量ないのですよ

393 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 14:05:57.90 ]
秀丸とVC++でおk

394 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 14:13:44.27 ]
VC 以外なら
Windows SDK のコンパイラを使うか
Borland C++ Compiler を使うか
MinGW の gcc を使うか
ってところ?

395 名前:デフォルトの名無しさん [2011/03/09(水) 15:17:00.51 ]
394さん
その3つではどれが一番初心者に向いてますか?


396 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 15:20:57.02 ]
秀丸SDKが対応してるコンパイラ。多分VCだろう。

397 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:07:46.21 ]
すみません。
メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を
読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか?

単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。

398 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:13:53.31 ]
インタープリターパターンといいます

399 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:18:48.35 ]
>>397
動的にコンパイルして、動的にリンクすればできるけど、
大変だと思うよ

400 名前:デフォルトの名無しさん [2011/03/09(水) 19:22:02.85 ]
早くしろよ!



401 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:35:34.28 ]
いまやってる!

402 名前:397 mailto:sage [2011/03/09(水) 21:02:49.41 ]
>>398 >>399
ありがとうございます。インタープリターパターンという物が有ったのですね。
インタプリタ言語を再現したかのような形式になるのですね。
ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。

403 名前:デフォルトの名無しさん [2011/03/09(水) 21:13:52.61 ]
早くしろよ!!!!!!進まないっ!!!!!!!!

404 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:17:39.06 ]
if((t%320)/80==1){〜〜}
if((t%320)/80==3){〜〜}



if((t%320)/80==1){〜〜}
else if((t%320)/80==3){〜〜}

ではどっちが早いんですの? 極わずかな違いだろうけど。
((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、
elseでぶっ飛ぶこと自体めんどくさいのかなって。

405 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:20:57.02 ]
後者。

406 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:23:04.58 ]
オケーイ。ありがとぅー

407 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 04:19:17.77 ]
>>404
tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。
整数型ならコンパイラが何とかするだろうけど。

408 名前:デフォルトの名無しさん [2011/03/10(木) 07:09:05.14 ]
質問です。
C言語の数値配列はなぜscanfのときは&がいるのに
printfのときは&がいらないんですか?

409 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:26:25.93 ]
>>408
まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。
例)
int hoge[10];

hoge[0] これは、int型データー。

&hoge[0] これは、hoge[0]のアドレスを指す。

hoge  これも、hoge[0]のアドレスを指す。

だから、 hoge と &hoge「0」 は同じものだ。

410 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:39:04.04 ]
×だから、 hoge と &hoge「0」 は同じものだ。
○だから、 hoge と &hoge[0] は同じものだ。



411 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:40:39.16 ]
>>409
見当違いだ。

用意されている関数とは別に、自作関数fを考えたとき
引数xの値を書き換えるにはどうすれば出来るか考えろ。


412 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:43:04.24 ]
値の更新したいとき。
int f(int x) では値の更新できないだろ。
だからアドレス渡しのint f(int *x)にする必要がある。
printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。


413 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:58:49.67 ]
すまん
そもそも数値配列だったか



414 名前:デフォルトの名無しさん [2011/03/10(木) 10:14:09.75 ]
CでDLL作るのとC++でDLL作るのはどちらが簡単ですか?
速度はどっちが速いですか?

415 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 10:32:58.60 ]
C
C

416 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 11:21:55.29 ]
すいません、質問です。

ShowDialog()ではフォームが開くのですが、
Show()に変えると開かなくなってしまいました。

エラーにもならないので原因がわからずこまっています。


417 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 13:01:29.83 ]
Show()に変えなければいいだけ
Showもないことを聞くな

418 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 19:49:47.68 ]
>>414
CもC++もこれから学ぶのなら絶対C++。
C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。

419 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:33:53.23 ]
複雑なことするのでなければCでいいよ

420 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:35:10.16 ]
オート変数の扱いがなんだって?



421 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:37:00.00 ]
C厨 vs C++厨

422 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:20:01.18 ]
C++ を便利な C として使うと言ってる人は、
C++ や C をキチンと使いこなせてるのかな?

423 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:54:34.29 ]
better Cとして使ってもいいって普通に言われてないか?

424 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:01:58.32 ]
使ってもいいとはよく言うけど勿体無いなぁと思う

425 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:14:01.88 ]
>>423
それは better C が便利だから言われてるのではなく、
C++ プログラマが自由に C++ を使いたくて、C の制限を
排除する為の方便として言われてるだけ。

実際は C プログラマにとってデメリットはあれど、大した
メリットはない。

426 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:33:46.14 ]
C++はCを由来とする言語だがCとはおおよそ異なる言語に進化している。
初学者必読の書、Effective C++を読むだけでも、
Better Cなどという使い方はありえないと教わる。
実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。

CにはCの、C++にはC++の利点があり、
双方の利点は競合している。

427 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:12:03.09 ]
ベターCいいと思うけどね
関数ローカルで可変長のバッファがほしいなーとか思ったときに
vectorでササッとやっつけしちゃったり
その程度でも十分役に立つし

428 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:19:51.86 ]
それは C プログラマが alloca() でササッとやっつけるのとどう違うの?
もちろん malloc/free でも良いよ

429 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:27:43.01 ]
>>428
なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん

430 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:31:14.68 ]
>>429
で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?



431 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:37:21.50 ]
allocaは関数を抜けるときに開放してくれるとは限らないよ

432 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:40:03.00 ]
>>431
それはどんな時?

433 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:42:08.48 ]
ライブラリで実装の時とか

434 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:58:46.11 ]
>>433
つ 無理筋

もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い

435 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:03:30.81 ]
建前:

「Better C として使うと便利だよ〜」

本音:

「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」

436 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:10:27.58 ]
中途半端な知識で書かれたC++コードなら純Cのがまだマシ

437 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:12:23.02 ]
完全無欠なる知識でC++のコードを書けるのは、この世界で一人だけ

438 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:21:28.78 ]
allocaって標準入りしたの?
C99で可変長配列が採用されたから今後も予定はないって聞いてたけど

439 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:31:30.81 ]
>>438
入ってない。可変長配列でオケ。

440 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:35:59.83 ]
>>436
リーナストーバルズちゃんもそう言ってたな。
実際、Cの流儀で書かれたC++コードほど迷惑なものはない。



441 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:41:28.45 ]
結局、ベターCって誰得?

442 名前:408 mailto:sage [2011/03/11(金) 03:52:59.23 ]
>>409さん
たとえば
    int data[10];
int i;

for (i = 0;i < 10;i++) {
printf("%d 番目の数値を入力して下さい:",i);
scanf("%d",&data[i]);
}

for (i = 9;i >= 0;i--) {
printf("%d ",data[i]);
}
printf("\n");
なぜこのプログラムではprintfのときに配列個々に&をつけていないのでしょうか。
配列の名前は配列の先頭のアドレスを表すつまり、このプログラムなら
data=&data[0]なのはわかりますが、なぜほかの要素に&をつけていないのに
データが参照されているかということがわからないのです。

443 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 04:01:33.33 ]
scanfが要求するのはポインタ、printfが要求するのは値。
単にこれだけの違い。

void f( int ); と void f( int * ); の違いみたいなもんですね。
パラメータ型が違うんだから、与える引数の型も変わって当然。

444 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 06:56:05.10 ]
>>441
俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが
俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利
合わない人と組んでやるときは、誰の特にもならない

445 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 07:55:56.16 ]
BetterCとして作るときって言うと、構造体に演算子オーバロードはよく使うな。自分用ツールなら他人が読めるかは余り気にせずできるし。
それでも流石にDoxygenコメント位入れるけど。

446 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:30:07.62 ]
>>444
ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。
IDE必須になるのが嫌だな。

447 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:42:24.51 ]
>>444
クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・
元々がC with Classな訳だし

448 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:58:28.54 ]
>>447
そう?
俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは
ちょっと便利な構造体だけどな?
継承とか演算子のオーバーロードがあるとC++って感じになる
と言いつつ、クラスの性質に合わせて両方とも使ってるけどね

449 名前:デフォルトの名無しさん [2011/03/11(金) 10:15:11.38 ]
DLLを作るとき1+2=3みたいに計算させる場合はCとC++どっちがいいのか聞いておるのだ

450 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 10:32:20.70 ]
どっちでもいいよ。



451 名前:デフォルトの名無しさん [2011/03/11(金) 10:55:27.62 ]
Cで作ることにしました

452 名前:デフォルトの名無しさん [2011/03/11(金) 10:56:10.21 ]
勉強熱心な若者はCでアイフォンアプリもアンドロイドアプリも作れることを学習したんですよ

453 名前:デフォルトの名無しさん [2011/03/11(金) 11:02:28.87 ]
至急!!!!!コンパイラが見つかりません!どこにありますか?
www.embarcadero.com/jp/downloads

454 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 11:27:06.71 ]
目が悪いのか?Downloadって...

455 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 11:31:37.36 ]
スルーしないと永遠に付きまとわれるぞ

456 名前:デフォルトの名無しさん [2011/03/11(金) 12:35:41.62 ]
何故若者のやる気をなくす事を言うか?

457 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 12:40:32.02 ]
出る杭は打たれるよ

458 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 13:04:40.16 ]
それは457が陰湿なだけでしょ

459 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 13:40:46.46 ]
出てねーし
めり込んだ杭をどうしろと


460 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 23:16:01.68 ]
っ全然関係ねーけど、
町田市ようやく電気回復したよ。
9時間C++で遊べず^^;



461 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 23:43:36.66 ]
それは喜ばしいが小田急とJRが止まってるから町田に帰れない><

462 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 00:20:57.01 ]
今回は被災しなかった地域だけど
俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる
お前らも折り畳み自転車くらい持っとけば?

463 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 00:45:03.54 ]
>>448
もちろん STL も使うでしょ?

そこから分かる事は、ベターCというのは人に依って範囲が全然違うから
具体的な実態を持たない、気をつけるべき用語だと言う事だね。

464 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 05:09:26.98 ]
>>462
道路はどこも渋滞と帰宅難民で大混雑だそうだから気をつけなよ

465 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 13:39:27.78 ]
DLLのグローバル変数やstatic変数の寿命って最初にロードされたときですか?

466 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 14:21:20.69 ]
はい

467 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 21:59:40.13 ]

ttp://n.xxad.net/watch/sm13809685

【どうすればこの欲望の渦巻く堕落した世界に私の名を残せるだろうか】
※名を残したいとは思わないがw。
【狂乱のマシンを残せばいい】

【この狂乱の世界に相応しい野獣のようなマシンを】

【狼が来たからやってきた】

【お前の平和な街は今はもう安全ではない】

468 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 08:25:09.18 ]
すみません。C++でファイル等の読込状況をリアルタイム表示したいのですが、
マルチタスク、プロセスなど色々有る様なのですが、何を学ぶのが適切でしょうか?
また、学習にオススメのサイト、学習用サンプルの有るサイトなども有れば、教えて頂けますと幸いです。よろしくお願いします。

469 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 20:54:30.09 ]
>>468
スレッド。

470 名前:468 mailto:sage [2011/03/16(水) 22:58:44.95 ]
>>469
マルチスレッドなのですね。ありがとうございます



471 名前:デフォルトの名無しさん mailto:sage [2011/03/22(火) 00:22:33.52 ]
>>468
分割ファイル読みの方が楽だと思うけど。

472 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 02:49:28.72 ]
const char*
char const*

の違いを教えてください

473 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 03:14:41.32 ]
>>472
同じ


474 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 03:43:50.45 ]
>>473
ありがとうございます!!!

475 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 19:53:08.28 ]
西日本も福島原発の放射能に曝される。

4/7 予測 up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 www.dwd.de/
今後 atmc.jp/ を注目せよ。

476 名前:デフォルトの名無しさん [2011/05/03(火) 22:35:12.60 ]
test

477 名前:チョクト mailto:sage [2011/05/04(水) 11:33:45.69 ]
どなたかバージョンアップしていただけないでしょうか?
とてもじゃないですが、自民の論客どもに太刀打ちできません ( ノД`)シクシク…

答弁プログラムver.1.0

#include <stdio.h>
#include <stdlib.h>

int main(void){
srand((unsigned)time(NULL));
while(1){
switch(rand()%3+1){
case 1:
printf("しっかり\n");
break;

case 2:
printf("きっちり\n");
break;

case 3:
printf("ちゃんと\n");
break;
}
}
}

478 名前:デフォルトの名無しさん [2011/05/04(水) 16:45:02.58 ]
#include<stdio.h>
main()
{
int a1,a2,a3,a4;

a1 = 5;
a1 = a1 + 2;
printf("a1 = %d\n",a1);

a2 = 5;
a2 += 2;
printf("a2 = %d\n",a2);

a3 = 5;
a3 = a3++ + 2;
printf("a3 = %d\n",a3);

a4 = 5;
printf("a4 = %d\n",a4++ +2);



return 0;
}

なぜかコンパイル出来ません
6行目のa1 = a1 + 2;が指摘されてるんですが、理由が分かりません


479 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:47:01.47 ]
>>478
codepad.org/dMf4ePXj

コンパイルと実行できたよ。

480 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:48:45.45 ]
>>478
main関数に型がついてないだけだよ!

codepadは無くても良いのね



481 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:51:19.60 ]
>>478です
int mainで出来ました
だけど、今までこれ以外の他のコードではint mainとかかなくてもコンパイル出来てたんですが
なぜこのソースに限ってはint mainとしなきゃダメだったんでしょうか?


482 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:53:44.72 ]
>>481
コンパイルする環境が変わったとしか思えない

483 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:57:04.48 ]
ずっとBorlandのままです

484 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:59:09.67 ]
いままで return 0; つけてなかったんじゃねーの

485 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:05:37.07 ]
拡張子を .c にすると C になって int を省略できるけど
拡張子を .cpp にすると C++ になって int を省略できないとか
そういうことじゃないのかい

486 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:07:34.24 ]
今までOKで急にエラーになったんなら、なにかしら環境変わってるだろ。

487 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:14:19.53 ]
>>484
それはないです
ずっとソースを使いまわしながら関数だけ変更してたので
たまたま今回はint mainにしなければなぜかコンパイル出来ない状態になったので
ビックリしております
環境が変わったにしてもその理由もサッパリです
ただ、大した問題じゃなさそうだし解決したのでよしとします


488 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:32:10.22 ]
#defineとはどういう意味ですか?

489 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:04:55.47 ]
定義

490 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:25:08.91 ]
どうゆうときに使うんでしょうか?



491 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:33:24.25 ]
名前空間を汚すだけのバッドノウハウです
使う必要はありません

492 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:34:24.93 ]
>>490
置換用のマクロだよ

493 名前:デフォルトの名無しさん [2011/05/04(水) 22:36:46.64 ]
勃起するまでのない質問はここで

494 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 23:02:42.87 ]
#defineは神

495 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 00:10:15.05 ]
メンバー変数の初期化順って仕様で決まってる?

496 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 00:25:49.87 ]
>>495
初期化子の話なら決まってるよ

497 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 23:45:19.26 ]
c++のホントに最初の入門書だとやさしいc++で宜しいでしょうか
他の言語はC言語をさわりだけやった程度なので、他の言語をやった人向けのは難しいです

498 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 01:33:46.81 ]
>>497
なんかググったら同じ本二種類出てきてわからないが、理解できそうならそれでいいと思うよ
初心者用って書いてあるけど他の言語習得者向けな本があること知ってるなら他に注意すべきこともないだろう

C++はコンパイルは通るし動くけどやっちゃいけないことというのが多いので
むしろ基礎が終わったら、そのうちEffectiveC++とか読むのをおすすめする
ちょっと便利な機能の増えたCとして使う気ならべつにいいが

499 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 01:59:32.25 ]
初心者はC++に触っちゃいけない。バッドノウハウの塊だから。
まだ、perlの方がまし。

500 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:09:18.61 ]
getcharってのは何か文字を入力したらその文字だけを蓄えるという意味ですか?



501 名前:>>500です mailto:sage [2011/05/06(金) 02:39:24.23 ]
while (1) {
printf("A:\n");
printf("X:\n");

while (1) {
c = getchar();
if(c != '\n') /*cが\nでないなら*/
break;
}

switch (c){
case 'A':
case 'a':
printf("\nAだった\n\n");
break;
case 'X':
case 'x':
end = 1;
break;
default:
printf("\nまじめにやれ\n\n");
break;
}
if (end == 1) /*endが1なら*/
break; /*whileループを抜ける*/
}
printf("\nおわり\n");

Aとa、Xとx以外の文字を入力すると「まじめにやれ」と出力されるのはどこで判断してるのかが
分かりません。
また6,7行目と25,26秒目のifのところがイマイチ理解できません。

502 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:47:59.64 ]
>>501
default: がなんなのか分からない
breakの意味が分からないってことか?

503 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:52:22.64 ]
>>502
それは大丈夫です


504 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 07:22:37.68 ]
大丈夫じゃねぇじゃん

505 名前:デフォルトの名無しさん [2011/05/06(金) 14:12:10.90 ]
それはほんとに大丈夫なんでお願いします


506 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 14:23:43.80 ]
case 'X':
case 'x':
end = 1;
break;
breakがないとcaseはそのままスルーしてたとえXでもendのところにくる
だが一般にこれは行儀が悪く良くない書き方

507 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 14:36:31.73 ]
end 1ってのはそもそもどういう役割ですか?

508 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 15:04:36.37 ]
たぶんX,xが入力された場合もwhile(1)のループを抜けたいんだろうけど
switch文の中なので直接飛べないのでendという変数をフラグにしてあるんだろ
swtichの次のところでendが1ならwhileループを抜けると書いてある

509 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 15:13:05.69 ]
初心者です
VC++で、コンボボックスにデータバインドする方法を教えてください。
XSDファイルをバインドしたいのですが、データソースには「なし」としか書かれていなくて困っています

510 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 16:33:48.63 ]
ある関数において長さが不確定の値を配列に受け取り
配列の反復子を関数に渡してそれに入れてもらうと仮定した場合
配列の大きさが前もってわかってないので十分な大きさを確保する必要があると考えますが
これは不合理と理解しますのでソリューションをご教示ください。



511 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:45:59.69 ]
1,std::vector vec; vec.resize(n);
2,char* = new char[n];
3,char* = (char)malloc(sizeof(char) * n);
好きなのを使えばいい。メモリは解放するんだぞ

512 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:49:37.15 ]
メモリー解放すぐ忘れちゃうんで
使い終わったら勝手に消えてくれるイテレーターがあると助かるんだけど。

513 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:55:19.63 ]
必要に応じて領域を確保していく出力反復子的なものを作って渡せばいいんじゃない

514 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:00:28.20 ]
std::back_inserterというものが有ってだな

515 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:13:32.59 ]
codepad.org/pJvvXAhu
仕様的にこのようにlistの走査中に削除や追加をしていいのだろうか?

516 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:18:20.28 ]
listだから問題ないだろ
一つ一つの手続きに問題が無いんだし

517 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 20:17:11.94 ]
そういう事じゃなくて、個人はどう呼ぼう

518 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 01:22:42.46 ]
誰か>517の解説を頼む。

519 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 08:56:21.46 ]
そういう事じゃなくて、故人はどう呼ぼう

520 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 09:22:56.32 ]
>>515
一般的なlistの実装なら問題ないのかな
これがvectorだったら再確保された場合イテレーターが死ぬから無理だけど
仕様で許可されてるのかどうかまではわからないな



521 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 10:29:04.37 ]
つ規格書
listコンテナのmodifier (23.2.2.3)
insert,push_front,push_back はイテレータや参照の有効性に影響を及ぼさない。(p1)
erase,pop_font,pop_back,clear は削除される要素へのイテレータや参照だけ無効になる。(p3)

522 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:09:13.01 ]
https://gist.github.com/960160

void solve(vector <pair<string, int> >& h){}

この様な "ペアを内包したベクタへの参照を引数に取る関数" を定義したいです。でも出来ません。
「invalid initialization of non-const reference of type…」とコンパイラに怒られます。
現状は
void solve(const vector<pair<string, int> >* h){}
としています。お教え頂けませんか?


523 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:20:51.60 ]
日本語仕様書ってどこにあるの?pdfただで見れるの?

524 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:22:36.45 ]
>>522
const

525 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:53:18.25 ]
姉はああいう味なんだと思う。

526 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:16:57.37 ]
>>522
gcc4.5.2(MinGW)では普通に通るが

typedef std::vector<std::pair<std::string, int> > Vpsi;

void solve(Vpsi& h)
{
for (Vpsi::const_iterator pos = h.begin(); pos != h.end(); ++pos)
std::cout << "String = \"" << pos->first << ", int = " << pos->second << std::endl;
}

int main()
{
Vpsi v;

v.push_back(std::make_pair(std::string("abc"), 1));
v.push_back(std::make_pair(std::string("def"), 2));
solve(v);
std::cin.get();
}

527 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:38:25.91 ]
構造体の配列をコピーするのですが、
memcpy_s でコピーして問題ありますか?

次のような構造体のときmemset()で0初期化すると
整数型0と挙動小数点0.0f, 0.0dの区別の関係で問題があると
きいて懸念ができたので聞いておきたいのです。

struct A
{
char c;
int i;
float f;
double d;
};

528 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:43:47.11 ]
こうすれば、問題ない。(しなくてもよい)
struct A
{
double d;
float f;
int i;
char c;
};

529 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:52:47.05 ]
>523 C++03の日本語版X3014ならJISCのサイトで閲覧できる

530 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 14:14:08.99 ]
>>526
関数定義が構造体(貴殿のでいうVpsi)の参照渡しなのに、アドレス渡してcallしてました。
呼び出す方のミスでした。アホだった。ありがとうございました。

>>524
const は記載ミスでした。関係有りませんでした。すみません、ありがとうございます。




531 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 14:26:48.76 ]
>>527
注意する点は、
「C++の仕様内で整数型および浮動小数点数型の内部表現が定まってない事」
「バイト単位によるコピー、セットに伴うアラインメント」
「A自体がPODかどうか」

それぞれぐぐれば出てくる。
まぁ、AはPODだしアラインメントは::operator new使えば関係ないし
整数型の内部表現も二進数で1バイトのbit数も8だろうし
浮動小数点数規格IEEE 754, 854は全てのデータが0であると+0として認識されるから
その時点ではそれらの関数を使うことに対して全く問題はない。

532 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 16:31:42.78 ]
>>509
winapiスレがいいですよ

533 名前:527 mailto:sage [2011/05/07(土) 17:31:50.00 ]
ありがとう。
でもアライメントはsizeofで構造体サイズを指定すればいんじゃない?

534 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 20:23:26.98 ]
よくあるタイプの処理系だとdoubleのサイズが最大のアライメントになるから
構造体サイズをアライメントに採用すると間違いではないけど無駄が多くなる


535 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:31:08.50 ]
STLがアロケーターに要求しているmax_sizeって、メモリが無限にあると仮定して
1 現在において一度に取得可能な数
2 最も良い状況での取得可能な数
のどっちでしょうか?

536 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:46:21.51 ]
無限のメモリをアドレッシングするには無限長アドレスが必要だけど、
そんなCPUアーキテクチャは存在しない。バカな質問するな。

537 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:51:13.86 ]
>>536
仮定って言ってるだろ
空きメモリの限界に引っかかる場合を除いてって意味でしょうに

538 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:57:33.51 ]
std::numeric_limit<std::size_t>::max()

539 名前:デフォルトの名無しさん mailto:sage [2011/05/08(日) 21:42:53.33 ]
>>535
論理的に確保可能な要素の数。

540 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 05:19:28.20 ]
C++でAの処理が終わったら主処理ループn回分待機してからBの処理、
Bの処理が終わったら主処理ループm回分待機してからCの処理
のような仕組みをカウンタの変数用意して回すのが嫌で嫌でなりません
どうにかしてC++でマイクロスレッドやコルーチンを用いる方法はないでしょうか



541 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 06:40:07.93 ]
手段を問わないんならコルーチン実装したライブラリ使えばいいだけじゃないのか

542 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 10:36:46.35 ]
AMD64が主流になってもLLP64じゃsizeof(size_t)==sizeof(unsigned long)==32bitだしなあ
欠陥を感じずにはいられない
なぜLP64またはILP64にしなかったのか
まあWin64を直接コールすれば関係ないが

C/C++を軽視したモデルと言わざるを得ない
もちろんメモリスペースの問題からintは現行の32ビットでも十分だ
size_tをlong long intにすればいいのに

あれ?でもMSDNには

>int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。
>64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインタを 32 ビット
>変数に割り当てないように注意してください。ポインタは、64 ビットのプラットフォームでは 64 ビット
>なので、ポインタを 32 ビット変数に割り当てると、ポインタ値を切り捨てることになります。

>size_t、time_t、および ptrdiff_t は、64 ビット Windows オペレーティング システムでは 64 ビット値です。

>time_t は、Visual C++ 2005 以前の Visual C++ バージョンの 32 ビット Windows オペレーティング
>システムでは 32 ビット値です。Visual C++ 2005 以降では、time_t は既定で 64 ビットの整数です。
>詳細については、「時間管理」を参照してください。

と書いてあるぞ???

543 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 10:46:16.97 ]
どしたの

544 名前:デフォルトの名無しさん [2011/05/09(月) 11:06:17.37 ]
(´・ω・`)

545 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 15:59:54.51 ]
>>540
ttp://codepad.org/xl8U0aul
こういうのは?いろいろパターンあると思うけど

546 名前:デフォルトの名無しさん [2011/05/09(月) 16:00:30.77 ]
>>507
どうもすいません
aかAを入力すると「Aだった」出力されます
それ以外のキーを入力すると「まじめにやれ」と出力されます
つまりXかxを入力しない限り、このコマンドは終わらないということですが、
それは何がどう働いてるからこういう動きになるのでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:06:25.58 ]
全体を while (1) { 〜 } で囲んで繰り返しにしているのでそういう動きになります

548 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:16:22.39 ]
>>547
whileが真の間だけ繰り返すというのは理解してるんですが、この場合、何か入力したら、
getcharがゲットし、それをcに代入するわけですよね?
ここでここでcが\nと等しくない(>>501の7行目)ってのが何を意味するのかイメージつかめません
また、24行目のif( end == 1)の1ってのがどういうアレなのかもイメージ尽きません

549 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:23:19.38 ]
自分がコンピューターになったつもりでc,endに何が入っているか追跡してみなよ。

550 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 17:11:39.62 ]
>>548
端末に例えばAだけ入力したくても通常は1行入力モードだから改行文字が必要。
で、そいつを入力すると今度は判定の邪魔になるから改行文字は無視したい。
さて、どうする? と言うお話だったのさ。



551 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 17:16:12.62 ]
>>548
getchar() は、入力した文字を1文字ずつ返します。 改行も '\n' という文字になります。
例えばあなたは、まず a を押し、次にエンターを押し、さらに x を押し、次にまたエンターを押したとしますね?
そうすると、最初は getchar() が 'a' を返し、それが c に代入され、次の時 getchar() は '\n' を返し、それが c に代入され、さらにその次の時 getchar() は 'x' を返し、以下同様に動きます。
549氏の言われるようにそれで1行ずつプログラムの動きを追ってみてください。 人間コンピュータになったつもりで。
end の 1 は、ほら、case 'x': のところで代入してるじゃないですか。 end に 1 を代入したら end が 1 になり、 end == 1 が成立するようになります。

552 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 18:12:36.07 ]
getcharもendも意味が分かりました。
しかし、

if(c != \n);
break;

がどうもダメです。

文字がエンターと等しくない事がどうしてwhileループを抜けるになるんでしょうか?
aを押したあと、エンター押しますよね普通。
xを押せば終了ですが、aだと終わることなくループしますし。
つまりwhileループは抜けないことになるかと思います。

553 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 18:19:30.30 ]
>>552
while(1) は2つあるだろ
printf から switch 文まで全体を囲ってる外側の while(1) と、getchar と if 文だけを囲ってる内側の while(1)
そこの break で抜けるのは内側の while(1) だよ

554 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:04:22.40 ]
コンパイルすると九九が出力されるソースです。
iがjより大きいコンティニューになるようですが、どうみればいいのでしょうか?

#include <stdio.h>
int main()
{
int i,j;

for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
if(i > j)
continue;
printf("%d×%d = %2d\n", i,j,i*j);
}
printf("---------------------\n");
}

return 0;
}



555 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:57:39.95 ]
>>554
i<=jのときだけそこのループ処理を行う

556 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:45:39.25 ]
CとC++どっちが強いですか?

557 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:48:48.31 ]
五十歩百歩
ダブルスコアでC++

558 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:12:34.78 ]
>>555
もうちょい詳しくお願いします

iとjがインクリメントで1つづ増えてそれが9までいくってのはわかります
しかしi>jが何を意味すんのか、それによって何がどうなるかがイマイチ分かりません

559 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:15:09.64 ]
>>558
iがインクリメントされるタイミングわかる?

560 名前:デフォルトの名無しさん [2011/05/10(火) 01:15:37.91 ]
あげといてやるよ



561 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:22:51.64 ]
>>559
iがjより大きいときですか?

562 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:25:29.36 ]
>>556
C の方が断然強いよ

www.tiobe.com/index.php/content/paperinfo/tpci/index.html

563 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:31:20.92 ]
>>554を出力すると以下のようになるわけですが、iのほうはずっと1のままで、jは
2,3,4・・・インクリメントされてます。
でjが9に達したところで、iが2になってるのです
こうなるのはforとかifがどういうタイミングで働いてるのかがどうもつかめません

1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9

2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
  ・
  ・
  ・
  略

564 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:38:49.07 ]
>>563
ちゃんと自動でインデントしてくれるエディタ使ってる?
そしてfor文について理解してる?

565 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:42:08.79 ]
>>564
forはほぼばっちりです。

566 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:44:58.93 ]
>>563

#include <stdio.h>
int main()
{
int i,j;

for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
printf("(i, j)=(%d, %d)\n",i,j);
}
}
return 0;
}




#include <stdio.h>
int main()
{
int i,j;

for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
}
printf("(i, j)=(%d, %d)\n",i,j);
}
return 0;
}

567 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:50:46.96 ]
おい

568 名前: ◆6W4srb4nmo mailto:sage [2011/05/10(火) 03:10:20.81 ]
/*
www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/017.html#continue

if(i > j) continue;
は、もし、jがiより小さいか等しいなら、内側のループの最後まで飛び越す。次はj++
*/
#include <stdio.h>
int main()
{
  int i,j;

  for(i = 1; i < 10; i++){
    for(j = 1; j < 10; j++){
/*      if(i > j)
        continue;
      printf("%d×%d = %2d\n", i,j,i*j);
*/
      if(i <= j)
        printf("%d×%d = %2d\n", i,j,i*j);
    }
    printf("---------------------\n");
  }

  return 0;
}

569 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 19:35:17.14 ]
typeidの情報ってtypeidを一度も使ってないクラスのデータも取られる?
かかるコストはコンパイル時にtypeid使ってるクラスの分だけ?

570 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 00:34:10.88 ]
RTTIを有効にしたら全部だろう。
リンカあたりが取り除いてくれる最適化があるのか?
もっとも今時のPCなら、全部作られたとしても、そう大したコストではないとは思うが。



571 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 02:57:06.85 ]
全部のクラスでやってたらテンプレートであれこれするとすごい無駄になりそう

572 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:38:25.51 ]
文字列定数同士の比較ってstrcmpを使わなくてもポインタの値が等しいかで問題ないですか?


573 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:46:13.89 ]
有ります

574 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:49:00.96 ]
あーすみませんなんでもないです
ごめんなさい

575 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 13:35:03.57 ]
>>572
あります。文字列リテラルを同じ空間に確保するかどうかは環境依存です。

576 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:14:46.74 ]
インターフェースを追加するだけのクラス継承(メンバ変数を一つも持たない)ならスライシングが起こってもなんら問題ないよね?

577 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 17:25:51.36 ]
C++の質問。
SuperClass* pSuper p = new SubClass();
SubClass pSub = (SubClass)p;
このようにダウンキャストするときにdynamic_castを使わず
C言語ライクにキャストするとキャストコストがない、で正しいでしょうか?



>>576
仮想関数があるとサイズに違いがでるよ。



578 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 17:45:47.09 ]
>>577
演算子オーバーロードは問題外として

仮想関数関係のアレはC形式のキャストでもちゃんとやるよ



579 名前:469 mailto:sage [2011/05/12(木) 19:45:23.61 ]
>>577
Cスタイルキャストはオススメしない。コードが不明瞭になる
絶対キャストが成功する保障があるなら
static_castを使いましょう
boost使えるならpolymorphic_downcastをオススメ


580 名前:579 mailto:sage [2011/05/12(木) 19:46:54.73 ]
名前はミス



581 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 22:16:42.49 ]
ポインタの場合はreinterpret_castもありますけど
static_castの方は実行時ではなくコンパイル時ですね。
ありがとうございます。



582 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:38:27.80 ]
C++やっているけどいまだにオブジェクト指向ってのが何なのか分かっていない

583 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:42:29.93 ]
実行時のキャストコストって、CスタイルとC++スタイルで同じじゃないの?


584 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:56:02.33 ]
>>582
手続き型の言語に手を出すといいよ

585 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 01:23:33.11 ]
オブジェクト指向を使ったいい例がない


586 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 20:44:52.19 ]
C++の
<<
>>
ってかわいいよね

587 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 21:14:56.83 ]
いやかわいい顔して悪魔だよ

588 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 03:10:16.10 ]
コンストラクタから
仮想メンバ関数は呼んではいけなかったんでしたっけ?
基底クラスの非仮想メンバ関数は呼んでいいんでしたっけ?

教えてくださいお願いします

589 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 04:22:17.45 ]
コンストラクタで仮想関数を呼ぶと
オーバーライドされていても親クラスの関数が呼ばれる

590 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 14:40:10.68 ]
親から順番にコンストラクトされる仕様だから
親がコンストラクトされる前に子のメンバ関数を呼び出せてしまうとやばい
子の準備前に呼ばれるわけだからね



591 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 14:55:30.91 ]
>>590
親のコンストラクタから子のメンバ関数って呼べるんですか?
親のコンストラクタからメンバ関数を呼ぶと普通に其のクラスのメンバ関数(さらに親はいないとして)が呼ばれるみたいなんですが


592 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 15:06:05.73 ]
呼び出せてしまうとやばいから、呼ばれないようになっている

593 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 15:07:59.11 ]
>>592
ですよね
みなさん参考になりました
どうもありがとうございました

594 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 17:20:54.22 ]
codepad.org/Vt0OuT8c

無理やり呼ぶとこうなる

595 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:15:06.08 ]
C++を知ってしまうとCなんて馬鹿らしくてやってられないよな;;

596 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:31:05.73 ]
C++の前にCをやれって言われてるのは、文法を解説してるC++のサイトや書籍が少ないからなんだよな
ほんと今から触れる人はCすっとばしてC++触るべきだと思うわ

597 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:33:37.57 ]
さらにC++03すっ飛ばしていきなりC++0xの機能使ったりSTLより先にboostとか触るべきだわ

598 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:37:43.22 ]
STLガンガンつかってるけどboost使ったことないわ
環境構築が居るってのが抵抗ある

599 名前:uy mailto:sage [2011/05/15(日) 02:36:23.56 ]
Boostとか、別にただのライブラリなので自分でかいたって良い。
たいしたものは存在してない
lambda? スマートポインタ?
自分でかけよ
自分でその程度の機能すらかけないゴミカスが、ライブラリに頼る時に使う機構をBoostと呼ぶ

そしてC++で出来る事は実は、やろうとすりゃCでも出来るので、
現在のITの世界の互換性っていう観点からみると、
C++よりもCを極めたほうが、広い世界を見ることが出来る
Cにしろ、C++にしろ、いずれ、マシなコンパイラ言語が世の中に出てくるはずなので
そのときに、いずれ両方とも消え去る
Cは時代遅れ、C++は、時代遅れではないけれど記述が冗長すぎて、
この言語は、使っていけません、ただの芸術作品です
情報技術のお部屋に未来永劫飾っておく言語、C#、JAVAよりは偉いよC++。
Cの次くらいに、偉い

C++は初心者の学習用言語にむいてる
生半可な力で使っていける言語ではないという点が、学習用途にはとても良い材料ではある
その苦境を超えてこれるなら、よきプログラマになれるだろう
そのままC++を使い続けるプログラマになったとしても、
C++から別言語に移ったとしても、C++を( その気になれば )かける奴というのは
根が強い。
言語というそのものへの理解が、深いといえる


ゴミグラマは死ね

600 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 02:39:16.30 ]
>>599
死ねゴミ



601 名前:uy mailto:sage [2011/05/15(日) 02:39:56.84 ]
>>600
よおゴミ^^

602 名前:uy mailto:sage [2011/05/15(日) 02:40:39.85 ]
いっとくけど、すいとんしても無駄だからな
ブラウザ5つもって全てのクッキーがレベル6以上なので、1個潰されたくらいなんともないので^^;;;;

603 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 02:52:16.47 ]
>>601-602
死ねゴミ

604 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 03:14:08.73 ]
ゲーム作るために速度が欲しいからC++って人もいるだろう
プリミティブが多いゲームだとC#じゃ速さが足りない

605 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 04:11:10.08 ]
俺は案件が要求する言語を使うが、そうでないやつがあれがいいこれがいいって言ってるんだろ?


606 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 04:13:24.29 ]
プリミティブじゃねぇよパーティクルだよ!あぁ恥ずかしい!

607 名前:uy mailto:sage [2011/05/15(日) 05:05:34.61 ]
>>603
お前が死ね ゴミグラマ

608 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 08:44:14.07 ]
>>607
死ねゴミ

609 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 09:34:01.17 ]
ゴミという単語をNGにしようと思ったけど
それじゃGCネタとかメモリ管理ネタが誤爆で見えなくなりそうだし困ったものだ

610 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 10:35:04.63 ]
>>609
uyをNGネームに指定してあとは連鎖で



611 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:25:12.92 ]
C++でクラスのメンバとしてchar型の文字列を扱う方法はありますか?
おねがいします。こんな感じで書いてみたんですが、案の定ダメでして。

class hoge
{
char hogehoge;
public:
char getHogeHoge()
{
return hogehoge;
}
char setHogeHoge(char value)
{
hogehoge = value;
}
}

612 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:29:51.81 ]
>>611
class hoge
{
char hogehoge[256];
public:
char* getHogeHoge(char* value)
{
strcpy(value, hogehoge);
return value;
}
void setHogeHoge(const char* value)
{
strcpy(hogehoge, value);
}
}


613 名前:uy mailto:sage [2011/05/16(月) 07:52:46.15 ]
>>608
お前が死ね

614 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 11:25:07.85 ]
>>613
お前が死ね

615 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:28:17.12 ]
>>614
お前が死ね

616 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:39:18.70 ]
>>613-616
全員死ね

617 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:41:34.17 ]
>>616
お前が死ね

618 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 13:14:13.55 ]
>>615
お前が死ね

619 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 18:11:55.21 ]
じゃあ俺が死ぬわ

620 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:53:33.74 ]
いや俺が死ぬよ




621 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:56:59.25 ]
はぁはぁ、生き残ったのは俺だけか…

622 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:59:50.40 ]
死んで行った仲間のために、俺は戦う

623 名前:デフォルトの名無しさん [2011/05/18(水) 14:02:29.70 ]
例外処理について教えていただきたいのですが、他の人が作ったソースの修正を行います。
__try{}文を見つけました、これをC++のtry{}catch()に変更したいのですが、特に問題ないでしょうか?

環境は、windowsのアプリです。

624 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:04:11.34 ]
>>623
だめだよwwwwwww
それはそれぞれ全然違うものだ

625 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:25:05.62 ]

try{
__try…

}
catch{

}


626 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:30:06.78 ]
win32構造化例外でぐぐればなんとなくは分かるはず

てゆーか何で書き換えたいの?

627 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:09:40.63 ]
現在VC++から変数の値をVBに渡してVBで処理するプログラムを作成しています。
VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm
を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。

628 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:20:26.64 ]
スレ違い

629 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:43:02.19 ]


630 名前:デフォルトの名無しさん [2011/05/19(木) 20:00:37.39 ]
Cがちゃんとしたオブジェクト指向を提供しないからC++やらないといけないよね;;



631 名前:デフォルトの名無しさん mailto:sage [2011/05/19(木) 20:45:37.91 ]
C++が「ちゃんとした」オブジェクト指向かどうかは微妙だけどな

632 名前:デフォルトの名無しさん mailto:sage [2011/05/19(木) 21:17:28.94 ]
627です。
解決しました。
お騒がせしました。

633 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:32:09.73 ]
CとC++の違いを教えてください。、

634 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:36:35.19 ]
>>633
使えるライブラリが違います
C++ではboost使えますが、Cでは使えません。

635 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:54:11.54 ]
>>634
あっ。て事はCの後はC++でほぼ同じ内容を違う言葉で覚え直す感じでしょうか?

636 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:01:04.36 ]
とりあえずwikipedia読んだほうがためになると思われ
ttp://ja.wikipedia.org/wiki/C%2B%2B

637 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:02:49.14 ]
ありゃ。
wikiは参考にさせていただきます。
ありがとうございます。

638 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:06:44.37 ]
うむ。
人に聞いてわかるほど単純じゃないな。
全部、一から勉強しよう。

639 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 19:09:24.15 ]
wikipediaをwikiっていうな

640 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 01:54:51.53 ]
wikipedia ⊂ wiki



641 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 02:53:46.74 ]
pukiwikiってうまそう

642 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 11:04:41.03 ]
wifi

643 名前:デフォルトの名無しさん [2011/05/21(土) 23:29:00.28 ]
VC++ 2010でzlibのlibファイルを作ろうとしているのですが、
大量のfatal errorを吐かれてコンパイルできません。

zlib\adler32.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。
zlib\compress.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。
以下略

手順は
1.プロジェクトは新規作成->Win32 コンソールアプリケーション
2.表示されたウィンドウのスタティックライブラリを選択して完了
3.zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる
4.既存のファイルから.cと.hを追加し、Releaceでコンパイル

プリコンパイル済みヘッダを消してみたり、stdafx.hなどを消してみたり色々試したのですが、
他のエラーを吐き始めるので先に進みません。
宜しくお願いします。

644 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 00:20:15.73 ]
.hをコンパイルしている悪寒。つーか、VSスレにでも逝ったら?

645 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 01:00:28.24 ]
>>643
暇なので試してみた

1、プロジェクトは新規作成->Win32 コンソールアプリケーション
 プロジェクト名はzlib(zlib1でもなんでもいいけど),ソリューションのディレクトリを作成にチェック
2、表示されたウィンドウの"スタティックライブラリ"および"空のプロジェクト" を選択し完了
3、 zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる
4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
 4996を除けばエラー0、警告0

動作確認方法は
同ソリューションに
コンソールアプリケーションプロジェクトを追加し
exsample.cを追加
$(OUTDIR)\zlib.libをリンクしコンパイル
こちらも4996を除けばエラー0、警告0
実行しても問題はない模様

>4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
この行は適当だから他のメイクファイルを参考に確認したほうがいいかも

646 名前:デフォルトの名無しさん [2011/05/22(日) 01:39:12.77 ]
>>645
2度ほど、慎重にやってみましたがエラーの内容は変わりません。

もしかすると、と思いfatal errorの内容で調べてみたら
プリコンパイル済みヘッダを使用しない、/Tcオプションを付ける、などで対処できるらしいと聞きました。

そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
プリコンパイル済みヘッダーの項目を使用しないに変更しました。
また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
コンパイル言語の選択をCコードとしてコンパイルを選択、
プロジェクトをクリーンしてビルドしました。

ビルドは通りました。.libも作成されています。ログを載せておきます。
www.dotup.org/uploda/www.dotup.org1657702.log.html

半分自己解決したようなものでお手を煩わせてすみません……。
ありがとうございました。

647 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 02:18:22.21 ]
> そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
> プリコンパイル済みヘッダーの項目を使用しないに変更しました。
"スタティックライブラリ"の場合はそうだね、すまん

> また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
> コンパイル言語の選択をCコードとしてコンパイルを選択、
拡張子が*.cならCコードとしてコンパイルされるのが
デフォルトの動作なので意味無いよ

648 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 03:51:49.25 ]
C++で独自のクラスAを格納するベクターコンテナ(STL)があったとき、
Aのoperator==は、フレンドで、グローバルに定義しないといけないの?

649 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 11:03:07.01 ]
例外はオブジェクト指向、特にカプセル化と相性が最悪な気がするんですがどうでしょうか?
せっかく実装を隠ぺいしたのに実装に依存して例外処理を書き換えないといけないなんて不愉快ですよね


650 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 12:15:32.99 ]
ほお、カプセル化すればエラー処理はしなくても良いと?



651 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 15:08:08.45 ]
>>648
なぜ?


652 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 15:16:10.20 ]
>>649
例外処理を実装に依存して書き換えるって、意味がよくわからないんだが。
それは例外処理の中身によるだろうし、もしそこが実装依存にしか書けない
エラー処理なら、それは例外処理を利用しなくても実装依存にしか書けないんじゃないのかな?



653 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:22:54.39 ]
>>648
ideone.com/Mdu3w

別にフレンドでグローバルでなくても良い

654 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:30:46.19 ]
>>652
例えばもともとnothrowだったメソッドが実装変更で例外投げる仕様になったら困るだろ
中身は意識しなくていいのがカプセル化のメリットなのに
これでは何を投げるかドキュメントやソースを常にチェックしないといけない
そして変更があったらクライアントコードすべてを調べなければならない
例外のせいでカプセル化台無し。こんなバカな仕様があってたまるかってこと


655 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:39:36.63 ]
>>653
あ、コンパイル通った……
通らなかったときは何してたんだ……
サンクス

656 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:21:43.32 ]
#include <stdio.h>

struct Man {
char name[32];
int age;
}

int main()
{
struct Man student;

strcpy(student.name, "山田太郎");
student.age = 16;

printf("生徒の名前は%dです\n", student.name);
printf("年は%d歳です\n", student.age);

return 0;
}
このソースのstrcpyの所に赤波線が出て、マウスを乗せると識別子"strcpy"が定義されていませんと出ます。
どうすればいいのでしょうか?
win7・VC++です

657 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:27:26.20 ]
#include <string.h>

658 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:34:14.18 ]
>>657
ありがとうございます。
猫でもわかるCなんて買うんじゃなかった・・

659 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 20:16:22.38 ]
>>654
それは言語仕様というより、設計の問題では。




660 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 14:52:04.45 ]
class CFoo
{
public:
 template <class CBoo> static int hogehoge(int CBoo::*);
…省略…
};

という(ような)クラスを目にしたのですが、
staticメソッド hogehoge の引数「int CBoo::*」 が意味不明です;;
これはなんの型なんでしょうか?



661 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 15:23:40.52 ]
引数なしintを返すCBooのメンバ関数ポインタ

662 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 15:33:07.62 ]
関数ちがう変数

663 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 16:27:47.21 ]
ああ、ありがとう。なんとなく分かって来た。
型int のCBooメンバへのポインタって事ですね。

int を void に変えたらコンパイルエラーになったけど、
それは 型void のメンバなんてそもそもないからなんだね。

664 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 17:43:09.44 ]
こういう風に書かないとコンパイルエラーになるけど気のせいか?
hogehogeはstaticメンバ関数なので非staticメンバ変数にはアクセスできないだろ

class CFoo
{
public:
template <class CBoo>
static int hogehoge(int *cbp) {
return *cbp;
}
};

class CBar {
public:
static int i1, i2;
};

int CBar::i1 = 1;
int CBar::i2 = 2;

class CBar2 {
public:
static int i1, i2;
};

int CBar2::i1 = 3;
int CBar2::i2 = 4;

int main() {
std::cout << CFoo::hogehoge<CBar>(&CBar::i1) << std::endl;
std::cout << CFoo::hogehoge<CBar2>(&CBar2::i1) << std::endl; }

665 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:07:23.67 ]
>>664
なんか指摘おかしくないか?
確かにhogehogeはstaticだから"CFooの"非staticメンバ変数にはアクセスできないけど
それが>>660となんの関係があるのかわからないな
hogehogeにメンバ変数のポインタ渡してるだけだぞ?

666 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:10:00.84 ]
>>665
そうなのか
そしたらメンバ変数のポインタを渡したhogehoge()内でどんな事がCBoo::*に対して
出来るのかがわからない

667 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:19:12.36 ]
>>666
コンパイルエラーになるっていうんだもの
おかしいってのはそこ

グローバル変数かstaticメンバ変数使えば何かすることはできるだろう
意味は知らんが


668 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:19:22.11 ]
これなら分かるんだよな

class CFoo
{
public:
template <class CBoo>
int hogehoge(CBoo* cp, int CBoo::*cbp) {
return cp->*cbp;
}
};

class CBar {
public:
CBar(int i, int j) : i1(i), i2(j) {}
int i1, i2;
};

int main()
{
CFoo cf;
CBar cb1(1, 2), cb2(3, 4);

std::cout << cf.hogehoge(&cb1, &CBar::i1) << std::endl;
std::cout << cf.hogehoge(&cb2, &CBar::i1) << std::endl;
}

669 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:21:01.12 ]
>>667
ああやっぱりか
staticメンバ変数にstaticでないメンバへのポインタを渡してもコンパイルエラーになるだけだしな

670 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:32:23.08 ]
staticメンバ関数がthisを受け取らないという事を知らないとこのエラーの意味は
永遠に分からないだろう



671 名前:デフォルトの名無しさん [2011/05/23(月) 20:56:25.55 ]
文字列変数をグローバルで volatile char recbuf[20]; と宣言して、
mainの中で char s[20]; と定義して、strcpy(s,recbuf); と書くと、
warning: passing argument 2 of 'strcpy' discards qualifiers from pointer target type
という警告が出ます。

どのように処理するのが正しいのかわからずに困っています。
どなたかこのワーニングの対処法がわかるかたいらっしゃいますか?

672 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:28:00.89 ]
>>671
キャストする
俺はconst_castはvolatileも外せるっていう程度の知識しかない人なので
それが本当に正しい対処法なのかは知らないが

673 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:33:43.36 ]
>>672
それが正しいかどうかがわからないので困ってます。
volatile char* を char* にキャストすることの意味が
いまいちよくわからないですよね。

674 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:51:53.10 ]
const char* にキャストすればいい

675 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 22:33:05.35 ]
それが本当にvolatileなら、迂闊に外していいものか充分に検討すべき。

676 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 23:09:09.73 ]
>>675
どうせ外さなくったって暗黙のキャストが発生するだろ
どうしたらいいんだよ

677 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 23:17:17.18 ]
いやだから、そのvolatileな領域にアクセスする前に排他処理を行なわなくていいのか、などの検討をするべきだ、と。

678 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 05:06:31.12 ]
C++でのクラス構成で質問です。

自分はよくこういう事をします。(文法細かい部分無視で説明用に省略)
Class A{
MyDataClass data; // データ管理クラス
B ChildClass;
A(){ ChildClass.pdata = &data; }
}
Class B{
MyDataClass* pdata; // データ管理クラスポインタ
}

シングルトンパターンでの構築方法は知ってますが、ついついこっちのが簡単なのでやってしまいます。
こういうのは一般的なんでしょうか?それとももっと良い方法があるのでしょうか?

679 名前:678 mailto:sage [2011/05/24(火) 05:13:56.85 ]
さすがにMyDataClassのアドレスを次々と下へいくつもリレーしていく数が多くなれば、
シングルトンパターンで構築します。
しかし、我流の組み方故に果たして自分はオブジェクト指向プログラミングしているのか?
そもそもそんな構築方法でいいのか自信が無くなってきました。

そもそもテンプレートとかも利用価値を感じたことがありません。
単一オブジェクトや変数を扱うなら小細工いらないし、複数のオブジェクトを扱うようなら
テンプレートの中で条件分岐が大量に増えてややこしくなるので、別関数いくつも用意したほうがいいように思います。


680 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 08:44:54.64 ]
相互参照をどう解決するかってこと?
普通に弱参照つかったり、引数で親をリレーしたりとかじゃねーかな




681 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 10:46:56.93 ]
>別関数いくつも用意したほうがいいように思います。

テンプレートの読み難さは尋常じゃないよな。
ありゃ完全にエロい人のための仕様だ。

682 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 11:06:21.92 ]
そうか?
std::min()なんてシンプルそのものじゃないか。

683 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 12:30:12.27 ]
派生クラスの間に合わせ感はすごい。
完全に後でちょっとした使用変更に対応する為のもの。
最初から組み込むのは混乱の元。

684 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:04:36.49 ]
メタプロまで出来るとテンプレートの凄さが理解できるんだけど
もはや完全にバッドノウハウだから
だったら最初から言語機能に組み込んで綺麗に書けるようにしろよとは思う

685 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:37:02.25 ]
いま勉強中で仮想基本クラスとかやってるんだけど、
本当にこんなややこしいもので開発なんてできるのけ?

686 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:48:04.47 ]
初心者的な質問で申し訳ありませんが、よろしくお願いします。
AとBのメソッドがあり、複数のスレッドで非同期的にメソッドが呼ばれています。
AとAが同時に呼ばれるときに排他処理をする必要は無いのですが、AとBが同時に呼ばれてはいけないので、排他処理をする必要があります。
この場合、一般的にはどのように排他すればよいのでしょうか?
Windows環境でWin32APIを使用しています。


687 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 17:36:12.12 ]
EnterCriticalSection

688 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 19:52:09.97 ]
>>685
問題が発生するような多重継承が出てきた時点で
設計がおかしいくないか疑うべきだがな

689 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 22:01:42.86 ]
結局CとC++はどっちのが実行速度速いんだ

690 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 22:28:25.36 ]
>>689
腕の良いプログラマーが書いたほう。



691 名前:デフォルトの名無しさん [2011/05/24(火) 22:57:03.38 ]
こういうバイナリファイル(先頭から1,2,0,4,0,0,0)
0102 0004 0000 00 ...
を先頭から1バイト、2バイト、4バイトで読み込むと
1,2,4にならずに1,0,4になるのですが、これはなぜですか?
ifstream ifs ("mem.dump");
ifs >> buf_1;
printf ("%x ", buf_1);
ifs >> buf_2;
printf ("%x ", buf_2);
ifs >> buf_4;
printf ("%x ", buf_4);

692 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:03:00.82 ]
結果は
$ ./a.out
1 0 4
です。

693 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:06:05.14 ]
違った。初期値が入ってました。
1バイト目が1(正しい)
2〜3バイト目が0(間違え)
4〜7バイト目が変わらず(間違え)
です。とにかくおかしいです。

694 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:12:58.60 ]
わかった。アライメントがあってないと壊れて0が帰ってきて
それ以降一切読めなくなるのですね。
飛んだ欠陥品だ > ifstream



695 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:22:25.71 ]
>>691
buf_1, buf_2, buf_4の型は?

696 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 01:58:32.67 ]
>>694
clear()やってないに1票

697 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 02:37:23.53 ]
オブジェクトのメンバを介してゲーム上のキャラクタ同士がダメージを与えたりするものなのだろうか。

いきなりだが、ゲームプログラムの噺です。

698 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 03:00:50.40 ]
>>694
欠陥品なのは君の頭の方です

#include <iostream>
#include <fstream>
#include <iomanip>

const char* const FILENAME = "test.bin";

int main()
{
std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary);
char buf[128];

if (!ifs)
return -1;
ifs.get(buf, 7);
std::cout << std::setw(1) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(*reinterpret_cast<unsigned char*>(buf)) << std::endl;
std::cout << std::setw(2) << *reinterpret_cast<unsigned short*>(buf + 1) << std::endl;
std::cout << std::setw(4) << *reinterpret_cast<unsigned*>(buf + 3) << std::endl;
}

699 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 03:04:39.50 ]
桁数を間違えていたので修正

#include <iostream>
#include <fstream>
#include <iomanip>

const char* const FILENAME = "test.bin";

int main()
{
std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary);
char buf[128];

if (!ifs)
return -1;
ifs.get(buf, 7);
std::cout << std::setw(2) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(*reinterpret_cast<unsigned char*>(buf)) << std::endl;
std::cout << std::setw(4) << *reinterpret_cast<unsigned short*>(buf + 1) << std::endl;
std::cout << std::setw(8) << *reinterpret_cast<unsigned*>(buf + 3) << std::endl;
}

実行結果

01
0002
00000004

700 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 05:35:25.85 ]
A.h
#ifndef classA
#define classA
class A{
 public:
 class B{
  public:
  static const int foo;
 };
};
#endif

A.cpp
#include "A.h"
const int A::B::foo=0;

M.cpp
#include <iostream>
#include "A.h"
int main(int arg, char** argv){
 int i=0;
 switch(i){
  case A::B::foo:
   std::cout << "hoge" << std::endl;
 }
 return 0;
}
*****
こう書いたら「M.cpp:6: error: ‘A::B::foo’ cannot appear in a constant-expression」と怒られるのだけれど、
なして? それと、クラス構造をそのままにしたい上でこういうとき、どうやったら良いんでしょう。
無理なのかな



701 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:10:02.38 ]
fooをenumにしてみるしかなひ

702 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:21:29.13 ]
>>701
やっぱりそうなんかー

enumは値の名前がグローバルになるのでイヤなんだ
結局クラス外にインナークラスを追い出して、
クラスじゃなくてnamespaceにしました orz


でもA.cppの中にmainがあると上のソースで通るんだよなぁ
なんなんだー

703 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:24:55.20 ]
え?インナークラス内でもenum使えるよ?

704 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 08:35:09.63 ]
え? enumの名前がグローバルって何そのC。

705 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:01:17.20 ]
ごめんenum勘違いしてた

706 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:24:26.67 ]
これだとアライメントが揃ってない読み込みでifstreamが壊れる。
 ifstream ifs ("dump.bin");
 char buf_1 = -1;
 short buf_2 = -1;
 int  buf_4 = -1;
 ifs >> buf_1 >> buf_2 >> buf_4;
 printf ("buf_1 = %x\n", buf_1);
 printf ("buf_2 = %x\n", buf_2);
 printf ("buf_4 = %x\n", buf_4);
バイナリデータは01 02 00 04 00 00 00 ...
実行結果は、
buf_1 = 1
buf_2 = 0
buf_4 = ffffffff


707 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:52:56.11 ]
template<int i> {
int xxx() {
if (i == 0) {
...
} else {
...
}
}
};
このメンバー関数xxxをテンプレート関数にしてifを使用しないようにしたいと思っています。
i == 0で特殊化すれば良いと思うのですが、どのように記述すればよいですか?

708 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:54:27.14 ]
template<int i> struct x{
でした。

709 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:28:32.90 ]
template < int i > struct x {

int xxx( void )


private:

int xxxZero( void ) { ... }

int xxxNonZero( void ) { ... }

};

710 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:37:05.48 ]
途中で送っちゃった
これでおk

#include <iostream>

using namespace std;


template < int i > struct helper { } ;

template < int i > struct x {

int xxx( void ) { return dispatchXxx( helper< i >( ) ) ; }


private:

int dispatchXxx( helper< 0 > const & ) { return xxxZero( ) ; }

template < class T > int dispatchXxx( T const & ) { return xxxNonZero( ) ; }


int xxxZero( void ) { cout << "zero" << endl ; return 0 ;}

int xxxNonZero( void ) { cout << "non zero" << endl ; return 1 ;}

};


int main( void ) { x<0> x0; x<1> x1; x0.xxx(); x1.xxx(); return 0; }



711 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:56:44.45 ]
>>710
ありがとうございます。思ってたより複雑だなあ。精進します。
> template < int i > struct helper { } ;
これはint => 型に変換? マップ?するテクニックでしょうか?

712 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:09:10.06 ]
>>711
>707ではメンバ関数だけどクラスから独立させちゃっていいの?
それだったらもっとずっと簡単。

713 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:20:20.34 ]
中でメンバー関数を呼ぶので、メンバー関数じゃなければだめです。

714 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:24:58.75 ]
関数を宣言するときと定義するときとの両方で型を明示するのは何で?

715 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:31:33.54 ]
めんどくせぇなぁ。インスタンスの参照を渡すクラス外関数にしちゃえばいいのに。

716 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:31:39.54 ]
Visual Studio 2005のC++でプログラミングしてます。
ごくまれに実行ファイルの明らかに計算結果がおかしくなってしまうことがあって、
前ファイルをリビルドすると治ります。

これってC++だと起こりうることなんでしょうか。
それともPCのどこかがおかしくてobjファイルが壊れたりしているのでしょうか。

717 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:36:18.27 ]
>>716
VC++がおかしいまたは時計がおかしい
C++がおかしいということは無い

718 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:38:46.92 ]
たぶんタダのバグって落ち

719 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:43:38.10 ]
>>716
project propertyのC++/GeneralのTreat warnings as errorsをyesにしろ。これで9割方解決する。

720 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:43:40.85 ]
未初期化変数か未初期化領域がありそうだな。



721 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 12:42:43.68 ]
>>706
アライメント関係無い
バイナリを>><<で読み書きすんな

722 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 14:29:22.25 ]
>>721
C言語の勉強をやり直せ。
>>706の使い方は完全に正しい。

723 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 14:59:56.83 ]
C言語かよ

724 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 15:58:57.99 ]
>>722
アホ
>>706はC++だよ
しかもテキストデータではなくバイナリデータを読み書きしてるんだ
バイナリデータに>>と<<は禁物

C言語でもバイナリデータの読み書きにはfread()とfwrite()を使うだろうが
それと同じ

よく話が分かってないのに余計な首突っ込むなカス

725 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:11:12.59 ]
>>724
あまり弱いものいじめはするな。彼は可愛そうな子なんだ

726 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:11:21.86 ]
>>724
バカはお前だ。ifstreamはバイナリ専門ではない。
わからないなら引っ込んでろ。

727 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:12:42.50 ]
ifstream ifs ("test");
int number;
ifs >> number;

↑ これは完全に正しい。分かったら恥ずかしさのあまり布団に頭突っ込んで悶えてろ。



728 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:18:29.41 ]
文字をデータとするrange(istreamで仮定されているものはここまで汎化されたものではないのだろうけど)
から読み取るものと考えると1byteが1文字に対応する多くの環境なら問題ないのかな?
一応openmodeにbinaryフラグが用意されてるからこういう使い方も想定済みとは思うのだけど

729 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:12:41.89 ]
>>727
まだ言ってるのかしつこいなあ
話は>>706から来てるんだぞ
「バイナリデータ」と書いてあるのが目に入りませんか?めくらですか?

730 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:19:53.26 ]
>>726
"dump.bin"の中身が a 111 222 とかだったら>>でいいだろう

しかし今の場合は 01 02 00 04 00 00 00 と続くバイナリデータの読み書きだ
この場合はオープンの時に>>699のように std::ios::binary を指定し、さらに
メンバ関数 get() でないと正しく読み取れない

もちろん改行文字など指定してはいけない
テキストではないのだからね

嘘だと思うんなら自分でバイナリファイルを作って読み書きしてみろ



731 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:41:34.90 ]
www.cplusplus.com/reference/iostream/istream/
によるとデータの解釈を伴う抽出するのが>>の役割だから
これを元にすればその解釈という作業が必要無い生データを読み込む場合であることと
別にgetなどのunformatted dataに対する操作を提供するメンバ群が用意されていることを考えると>>の使用は不適であることは言えるか

732 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:45:26.34 ]
>>731
「言えるか」じゃなくて実際に試してみろって
話はそれからだ
話がややこしくならないようにgccを使え

733 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:47:39.58 ]
>>732
お前がまず試せよ低能

734 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:52:18.80 ]
>>733
#include <iostream>
#include <fstream>
#include <iomanip>

const char* const FILENAME = "test.bin";

int main()
{
std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary);
unsigned char c;
unsigned short us;
unsigned u;

if (!ifs)
return -1;
ifs >> c >> us >> u;
std::cout << std::setw(2) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(c) << std::endl;
std::cout << std::setw(4) << us << std::endl;
std::cout << std::setw(8) << u << std::endl;
}

実行結果

01
0000
0040b0ac

735 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 18:06:16.66 ]
いい加減にあきらめろ>>733
ちなみに使ったファイルは>>699と同じ物
バイナリエディタで中身を覗けるから間違いない

736 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 18:55:41.69 ]
なあなあ、なんでこんなに低レベルなの?

737 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:00:09.20 ]
自分の思い通りにならないのは糞だって決めつけてるからさ

738 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:00:27.15 ]
>>736
お前みたいのが多いから

739 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:04:42.58 ]
バイナリデータを>>で読めないとか主張する奴は仕様から読み直せ。
まったく禁止されてない。もう見てられない


740 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:08:54.60 ]
もうねアホかと



741 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:15:06.34 ]
俺はistream::readとostream::write使うようにするけど>>でも空白とか改行に影響されずに読める方法があるなら興味ある

742 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:17:49.68 ]
>>739が教えてくれる

743 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:48:15.25 ]
template <class T>
class Binary {
T _data;
public:
Hoge(T data=0) : _data(data){}
...
friend istream& operator>>(istream& is, Binary& b) {
is.read(reinterpret_cast<char*>(&b._data), sizeof(T));
return is;
}
...
};
みたいのを用意してやれば
ストリーム演算子で読み書き出来るのは分かるけど
プリミティブな型ではどうやるかは分からんな

>>739氏に期待


744 名前:722 mailto:sage [2011/05/25(水) 19:50:05.56 ]
ごめん
俺の勘違いだった

745 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:04:41.51 ]
今日も大漁でした。本当にありがとうございました。
またのご利用をお待ちしていません。

746 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:19:46.18 ]
>>744
バーカ
仕様書ぐらい用意しとけ
恥かくぞ

747 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:20:37.20 ]
>>736
OSも書ける低レベル言語です

748 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:52:05.42 ]
>>699も厳密には間違っているんだけどな

get()じゃなくてread()を使わなければならない
get()では改行文字が現れるとそこで読み取りを終了してしまう

まあ operator>>でバイナリを読み取れると顔を真っ赤にしてファビョっていた
ヤシよりはマシだけどな

749 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:44:12.10 ]
C言語以前の問題なのですが
コマンドプロントでディレクトリの移動がよく分かりません。
デスクトップ上に保存しているメモ帳に「test.c」と名前を付け
chdir C:\Users\ユーザー名\Desktop\test.c.txt
とコマンドプロンプトに入力したところ
ディレクトリ名が無効ですとなりました。
ディレクトリ名に問題があるとおもうのですがどうなおせば良いのでしょうか?
独習Cという本を買ってさっきから始めたのですがこの辺詳しく載っていなくて困っています

750 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:49:17.83 ]
デスクトップにtest.c.txtっていうディレクトリがあるのか?
違うならそこ削らないと



751 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:49:34.53 ]
ディレクトリとファイルの区別がつかない人ですか?

752 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:53:10.05 ]
>>750,751
どうやらディレクトリとファイルの区別が付いていなかったようです。
調べてみたらなんとか解決しました。ありがとうございます。

753 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 01:50:34.74 ]
その本にはなんて書いてあるんだ?

754 名前:デフォルトの名無しさん [2011/05/26(木) 17:12:19.44 ]
cinって英語で何て単語の略なんですかね?

755 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 17:28:38.37 ]
cはcharacter
inはstandard input

756 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:23:19.70 ]
Cの標準入出力なんだから、(c)のためのin/out とか、標準なんだから、(c)ommon とか、
当時はキャラクタベースだから、(c)onsole とか、バイト単位だから (c)haracter とか、
好きなの選べ。


757 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:40:39.97 ]
Cってほんとにあいまいな言語だな

758 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:44:48.75 ]
www.libjingu.jp/trans/bs_faq2-j.html#cout
"c"は"character"の略です。これは、iostreamsが値とバイト(文字)表現を対応づけるものであるという理由からです。

759 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 19:19:27.34 ]
知らんかった…今までconsoleだと思ってた
でもたしかにiostreamヘッダだしconio.hみたいに明記されてるわけじゃないな

760 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:24:01.25 ]
>>757
CとC++一緒にすんな




761 名前:デフォルトの名無しさん [2011/05/26(木) 21:07:57.23 ]
世間一般(と言っても、理科系の大学)では、CもC++も一緒くだだよ。

762 名前:デフォルトの名無しさん [2011/05/26(木) 21:32:15.61 ]
Character INputでcinって事でOK?
変な端折り方だな。
coutはなんとなく意味分かるのに。

763 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 01:42:31.93 ]
マス目のゲーム戦闘画面ってDXライブラリで製作出来ます?
マップに座標を打ち込みつつ初期化
{0,0,0}
{0,1,1}の様な形。
for文でマップのマス目左上からズレていくように書き
switch文で case 0 は DrawGraph 画像 case 1 は 〜〜
の様にしてみたんですが、上手く表示されません・・・。
マス目ごとに対応した番号の画像を表示させるにはどのようにすれば宜しいでしょうか?



764 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 02:15:37.60 ]
>>762
INput
OUTput
むずかしいね

765 名前:763 mailto:sage [2011/05/27(金) 04:39:14.04 ]
すみません
スレ間違えました

766 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 19:02:14.31 ]
>C++は関数のオーバーロードがあるから保守性が高い
?

767 名前:uy ◆yyC0rYWEq2 mailto:sage [2011/05/29(日) 17:34:51.12 ]
>>766
何この人
だれのレスを引用したの?

きもちわる・・・

768 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 17:43:18.41 ]
>>767
お前が気持ち悪い

769 名前:デフォルトの名無しさん [2011/05/29(日) 19:25:46.47 ]
すみません。C++にて、あるクラスのコンストラクタを
関数の戻り値にして、main関数で受け取るということはできるでしょうか?

一応、できるみたいなんですが、文法上ただしいのでしょうか・・
なんしろ、コンストラクタというと、新しいオブジェクト生成しか使ったことがないんで・・

770 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 19:57:57.87 ]
>>769
「コンストラクタを関数の戻り値」というのがよくわからないが、これのこと?
値を返すならコピーされるから問題ない。

string f()
{
 return string("abc");
}

int main()
{
 cout << f() << endl;
}




771 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:14:29.21 ]
コンストラクタのメンバー関数ポインタをとれるかってことじゃないの?

772 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:26:32.64 ]
まぁそれだったらコンストラクタのアドレスを取得してはいけないでFAだな
>>769はなにをしたいんだろうな
オブジェクトを生成する関数を変数に入れたいとか?

773 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:40:17.85 ]
コンストラクタ(デストラクタも)のアドレスは取得できない、じゃないの?


774 名前:769 [2011/05/29(日) 21:21:04.85 ]
Area Ex :: getArea() {
return Area(); // Areaクラスのコンストラクタ
}

void Ex :: nanigasi() {
Area area = getArea();
}


775 名前:デフォルトの名無しさん [2011/05/29(日) 21:24:55.16 ]
簡単に話すと↑こういうことです。最初のselectArea()関数の戻り値で
Area関数のコンストラクタを使っています。
以上のことは、C++の文法上許されていることなんでしょうか?
もちろん、最初から、2番目の関数(getArea関数)で、
Areaクラスのオブジェクトを作れば一番簡単なのは当たり前ですが・・

776 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:25:30.72 ]
Area()は一時オブジェクトの生成だよ
それがコピーされてareaに代入される

そりゃ結果的に当然コンストラクタ自体は呼び出されるが、
コンストラクタを直接呼び出してるわけじゃない


777 名前:769 [2011/05/29(日) 21:27:00.40 ]
まちがえた・・・正しくは、

>最初から、2番目の関数(getArea関数)で、
最初から、2番目の関数(nanigasi関数)で、

です・・・

778 名前:769 mailto:sage [2011/05/29(日) 21:29:13.73 ]
>>777
ああ、一時オブジェクトの生成っていうんですか。この場合は。

本を読んでいて、なにか、見慣れない構文だなと疑問におもっていて
どうも頭を悩ましていましたので・・

ありがとうございます。だいぶすっきりしました。「一時オブジェクトの生成」で、
よくググッてみます。

ありがとうございました。

779 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:30:20.88 ]
>>777
メンバ関数へのポインタなら返せる
staticじゃなければthis、つまり本体のオブジェクトを指すポインタも必要だが・・・・


780 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:38:39.26 ]
ずれてやがる



781 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:40:33.63 ]
最短経路探索とかのテスト用に、ノード群とそのエッジ群をランダムに作りたいんだけど、
エッジの作成をノードを2つランダムに選んで作成ってすると、明らか遠すぎる所
と繋がっちゃってぐちゃぐちゃな経路になってしまう。
よくあるこんな図みたいに、ある程度近くのノードと繋がってる綺麗な経路をランダムに
作る方法ってありませんか?

782 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:47:44.98 ]
画像貼るの忘れてた。
テスト用に生成するだけだから、実行速度や正確性を求めるよりも楽に作れる方が良いです
ttp://www.deqnotes.net/acmicpc/dijkstra/graph.png

783 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 22:17:09.78 ]
ココで聞いていいのか微妙なんですが、

GNU General Public License
でのソフトを、自分のソフトが途中で起動する、という状況の時、
自分のソフトと利用するソフトの両方を配布するなら自分もGNUである必要がありますか?

また、もし自分のソフトを使う人に、GNUのソフトのダウンロードを任せるとしたら、
自分のはGNUである必要がありますか?


784 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 22:22:16.26 ]
>>781
平面グラフにするとか、n部グラフにするとか

785 名前:783 mailto:sage [2011/05/29(日) 23:26:35.74 ]
やはり質問取り下げます。すみません

786 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 23:45:09.49 ]
>>782
どの程度の規模で作るのかにも寄るけれど、せいぜい100ノードくらいでいいのなら、
全ノード間の距離を計算してもたいしたことないんじゃないか?
あとは、各ノードで距離順にソートして、範囲も個数も好きにしたまえ。


787 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 03:01:36.08 ]
>>784 >>786
ありがとう、楽な方の予め距離計算して近い物同士を繋げる方法でいってみることにします。

788 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 09:41:01.83 ]
>>781
距離をパラメーターにして、乱数を一様ではなく正規分布とか、自然な分布にすればそれっぽく見えると思うよ

789 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 15:42:46.99 ]
vectorでクラスを保持していて、そのクラスの中の変数を基準に昇順でソートしたいんだけど、
どうすればできますか?
一度vectorから取り出して、自分で書いたソート関数でソートしてまた戻すってするしかない?

790 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 15:54:09.12 ]
operator< と operator> を用意しなされ



791 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/05/30(月) 16:07:27.31 ]
前者だけで充分。

792 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:12:39.45 ]
でもなんか比較がひとつだと対称性がなくて気持ち悪い

793 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:15:23.02 ]
reverse_iteratorで取り出せば逆順になる

794 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:20:33.75 ]
>>789
環境とオブジェクトの個数にもよるけれど、オブジェクト数に対してメモリが十分あるなら
vectorで保持してそれとは別に、setなりmapなりで比較関数を用意して、
オブジェクトを登録するメソッドを呼ぶたびに、vectorと、ソート用コンテナにポインタで
登録するとかした方が楽じゃないか? かっこわるい?

795 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/05/30(月) 17:37:07.51 ]
格好悪いと言うか、面倒臭い。

796 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:47:25.19 ]
楽か?

797 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:55:30.03 ]
>>789
自分で書いたソート関数って叙述関数の事か

普通の関数にしろ関数オブジェクトにしろlambda式にしろ std::sort()で行けるだろ
もちろんdeep copyをするためにコピーコンストラクタと代入演算子は定義しとくのが
コンテナにクラスを入れる必要条件だが

798 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 22:00:00.50 ]
ありがとう、operator定義してsortで実装しました。
今までoperatorって難しそうだし面倒そうだと、勉強せず避けてきてたけど、やってみれば
意外とすんなり理解できたし、何よりすごく便利だね
もっと早く身につけておくべきだった


799 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 22:13:42.73 ]
そしてop地獄

800 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 23:15:30.76 ]
次は何でもかんでもoperatorを付ける病に



801 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 23:57:48.21 ]
>>800
いやいやshallow copyしか必要ないクラスにはいらないだろ
要するにコンテナに入れるクラスの要件がCopy ConstractableでCopyableであればよい
最初なぜauto_ptrがコンテナに入れられないのか随分悩んだけどそのお陰でよく理解できた

802 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:01:29.36 ]
普通にshared_ptr使えばよくね?

803 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:02:38.46 ]
>>802
今はな
その当時はboostなんか無かったんだよ

804 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:14:37.34 ]
>>803
> その当時
> 789 名前:デフォルトの名無しさん[sage] 投稿日:2011/05/30(月) 15:42:46.99
え?


805 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 03:46:23.25 ]
ifstreamを最初にテキストモードで開きました。
途中からバイナリモードで読み取りをしたくなった場合、
どのようにモードを変更すればいいですか?

806 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 03:53:14.82 ]
read/write

807 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 04:24:04.15 ]
>>806
ありがとうございます。なんかトンチンカンな質問だったかもしれません

808 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 04:40:06.47 ]
なぜか下のプログラムではファイルの真ん中あたりまでしか読めませんでした。
途中なのにwhileを抜けて実際のファイルサイズの大体半分くらいの
ByteNum サイズになってしまいます。どんな原因が考えられますか?
std::ifstream ifs(Filename);
int ByteNum = 0;
while(true)
{
 unsigned char buf[1] = "";
 ifs.read(reinterpret_cast<char*>(buf),1);
 ByteNum += 1;
 if(ifs.eof())
  break;
}

809 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 05:28:12.08 ]
改行が\r\nから\nに変わったとかじゃないの?

あとeof()の使い方が間違ってる
それじゃ一回余計にread呼んでByteNumも1足しちゃうよ


810 名前:808 mailto:sage [2011/05/31(火) 06:14:18.46 ]
>>809
やはり改行の関係のようでした。
結局バイナリモードで全部やったところきちんと読めました
ありがとうございました



811 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 15:08:49.71 ]
よく分からないので教えてください

えっと、自作クラスAを格納するvector<A>のSTLコンテナがあるとして
そのコンテナのインスタンスをI1、I2とかとします

クラスAには単純な代入と比較「A& operator=(const A&)」や、
「bool operator==(A&)」を定義してます
ここで「単純な」というのは、メンバをコピーや比較するだけと言う意味です

ここでコンテナインスタンスI1, I2に対して、I1 == I2や、I1 = I2などを使うと
g++で色々(/stl_algobase.hのなかで)エラーがでたあと、
「 note: candidates are: A& A::operator=(A&)」と怒られます

こういう自作クラスをSTLコンテナに格納し==や=をコンテナに対して使うとき、
Aに==や=を単純に定義するだけじゃ無理なんでしょうか

無理な場合、なぜ無理かという構造を教えてくれたらうれしいです
できる場合、なにが足りないのか教えていただけたら助かります

お願いします

812 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 15:27:53.08 ]
あ、いけました
すいません

お騒がせしました

813 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 16:51:42.45 ]
>>811-812
全部読んだじゃ無いか。

814 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 17:51:06.91 ]
>>811
こういう事だろ
std::vectorにはメンバ関数operator==があるので、これを呼び出すとコンテナ内の
オブジェクトのoperator==をそれぞれ呼び出して比較する

ideone.com/12uke

815 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:07:38.25 ]
std::copy
std::equal

816 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:14:01.86 ]
>>813-814
すいません

どうもコンテナに入れるクラスにoperator==を定義するとき、
引数と関数自体をconstにしないといけないみたいですね

そしてconstで受け取ったクラスインスタンスのメンバにコンテナがあったら
返ってくるイテレータ型がiteratorじゃなくてconst_iteratorなんですね

勉強になりましたが、C++ややこしいっす……

817 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 09:10:09.38 ]
>>816
そうなのかかえって勉強になった
俺はconstの参照で引数をバインドすると引数の受け渡しが高速になるので
そうしていただけだが(コピーコンストラクタの呼び出しが行われない)、const関数は
非constの引数も受け取れるけどその逆はだめだからな

818 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 11:35:17.70 ]
ある法則にしたがってデータを変換し、
新しいストリームオブジェクトを返す関数があったとして

MyStream * convert(MyStream *source)

この関数はストリームのヘッダ位置をどうするのが一般的?

source ストリームのヘッダ位置は関数呼び出しの時点に戻しておく
source ストリームのヘッダ位置は元に戻さず、最後に読み取った位置で放置

関数が返すストリームはヘッダ位置を0にしておく
関数が返すストリームはヘッダ位置はデータ末尾(追記可能な位置)にしておく


用途によって違うなら、想定しているのは...


ZIPからファイルを読み出す MyStream file = GetFileFromZipStream(zipStream) とか
スクリプトのプリプロセッサ MyStream preprocessedSource = RunPreprocessor(rawSourceTextStream) とか。


819 名前:デフォルトの名無しさん [2011/06/01(水) 14:39:43.26 ]
今、抽象クラスの勉強してるんですけど、まどマギ思い出したわ。

820 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 15:15:43.93 ]
>>816
これって今や、「C++が」ややこしいって印象になるんだな…



821 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 15:35:54.51 ]
>>819
kwsk

822 名前:デフォルトの名無しさん [2011/06/01(水) 18:18:14.79 ]
>>821
virtualつけると具体的なオブジェクトから抽象的な概念としての存在になる辺りがまどかのラストに似てるから。

//魔法少女クラスの宣言
class Mahousyoujo{
private magic;
public:
void mahousyoujo(int personal);

};

//魔女クラスの宣言
class Majo:public Mahousyoujo{
public:Majo(int personal);

};


//神クラスの宣言
class Madoka{
protected:
int magic
public:
virtual void majo(int personal);
};

//あと書くのめんどいや。

823 名前:デフォルトの名無しさん [2011/06/01(水) 18:29:35.92 ]
1000×1000ぐらいのBMPの画像データ読み込もうと
char a[10000000] ってでかい配列作ったら大きすぎてプログラムがメモリ確保できなくて動きませんでした。
こういうのって一般的にどうやって解決するんでしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 18:32:01.53 ]
>>823
先頭にstaticつけとけ

825 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 23:10:06.09 ]
>>823
ファイルをメモリの代わりに使う

826 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 07:29:25.05 ]
>>823
newかmallocで確保

827 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 11:06:40.37 ]
すみません。2つ質問なのですが、

1.CreateWindowで作った子窓を移動・消去するにはどうすれば良いのでしょうか?
2.CreateWindowで作った子窓同士を、いちいちマウスでクリックせずキー操作でフォーカスを移動したいのですが
  そうした方法の解説サイトは無いでしょうか?

828 名前:827 mailto:sage [2011/06/02(木) 12:11:45.16 ]
1の子窓の移動はSetWindowPosで出来る事が解りました。下手に窓を作ったり消したりは考えて見ると怖いので見えない位置に移動させるべき・・ですね。きっと。
フォーカスについても自己解決目指していろいろ調べてみようかと思います。

829 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 12:15:02.68 ]
アホな手法使うんじゃない

830 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 12:32:45.84 ]
>>828
それが正解です。
見えないところは、マルチディスプレイに気をつけるように。



831 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 13:08:35.39 ]
MinGW gppでコンパイルしてるんですが、このばあい成果物を公開するとしたら、ソースも公開しないとだめなんですか?

832 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 13:13:05.01 ]
いや、一部のソースも公開しないなら、しなくていいんじゃない。

833 名前:827 mailto:sage [2011/06/02(木) 13:35:44.82 ]
フォーカスについてもSetFocusで出来るとわかり、自分なりの形で組んでみようかと思います。

>>830
マルチディスプレイ・・環境に対しても気をつけ様と思います。
ご助言ありがとうございました。

834 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 17:06:41.43 ]
>>833
829さんの忠告が見えないの?
見えないところに移動じゃなくてShowWindowで何とかしろ。

835 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 20:59:27.45 ]
環境:VC++2008 MFC

同じリストの内容を持つコンボボックスを16個作りたい。(IDC_COMBO1~16)
16個のDDX変数を用意し、16回値を格納するのは綺麗じゃないので1個のDDX変数でなんとかしたいです。

ソースは以下の物で練習しています。
www.g-ishihara.com/mfc_cb_01.htm

どのようにすれば簡潔にかけるでしょうか?

836 名前: 忍法帖【Lv=2,xxxP】 mailto:sage [2011/06/02(木) 21:08:41.34 ]
配列使えば?

837 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:23:30.44 ]
[萌+]【アニメ/IT】「ほむほむ」だけでプログラミングできる言語登場 わけがわからないよ
headline.2ch.net/test/read.cgi/bbynews/1307041589/

二進数かよ

838 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:29:14.70 ]
>>837
どうせbfを差し替えただけなんだろ

839 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:47:25.06 ]
bf派生?いいえgrass派生です

840 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 08:11:12.32 ]
そっちか



841 名前:福盛俊明 [2011/06/03(金) 09:11:45.19 ]
俺はDarkBASICの天才♪”
俺に答えられない質問はない

質問はこちらへ
www.geocities.jp/courant_de_console/main_street/index.html

アハアハ〜♪”

842 名前:デフォルトの名無しさん [2011/06/03(金) 19:30:13.92 ]
プログラムをassert()で終了させた際に、
それまでに開いていたストリームを閉じてしまいたいのですが、
やり方があるならば、どなたか教えてください

843 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 19:52:46.95 ]
assertは内部でabortを呼んでプログラムを終了するが、
abort呼び出しはシグナルSIGABRTを投げるので、
signalハンドラでそれを拾えばそういうこともできる

844 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:01:23.50 ]
シグナル拾ったら、肝心のcoreが出来ないじゃん。

845 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:12:25.88 ]
そんなこと無いだろ

846 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:13:25.38 ]
やってみろよ。

847 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:20:44.26 ]
やってみたら当たり前のようにcore吐いたwww
低能哀れすぎwww

848 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:18:20.47 ]
そもそもSIGABRTは拾えない飢餓。

849 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:20:08.55 ]
Assertは使うものじゃないって習った
バックトレース拾えないから

850 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:21:06.09 ]
そもそもassertはそういう使い方をするものじゃないしな。



851 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:21:58.11 ]
なるほど、シグナルハンドラから戻ってきたらSIG_DFLに再設定してもう一回自殺するのか。

852 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:39:54.51 ]
言語規格書にはSIGABRTハンドラはreturnしないと書いてある
つまり、登録したハンドラの実行後プログラムは終了する

853 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:44:07.98 ]
>>842
atexit()で関数を登録して、そこでfcloseall()を呼ぶとか。

854 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:44:43.67 ]
>>853
abortだから無理っしょ

855 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:45:52.06 ]
つかassert書くぐらいで終了処理したいなら
if文書いて中の最後でexit呼べば良いと思う

856 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:00:49.16 ]
本当は sigaction() の方が便利だが、標準の範囲だとこんな感じ?

#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

void sig_abort(int sig)
{
    puts("interrupt");
}

int main(void)
{
    if (signal(SIGABRT, sig_abort) == SIG_ERR) {
        perror("Couldn't establish sig_abort");
    };
    abort();
    puts("Do not abort");
    return 0;
}

857 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:05:04.75 ]
>>825
そんな事は書いてない。
The abort function causes abnormal program termination to occur, unless the signal
SIGABRT is being caught and the signal handler does not return.

unless以下の例外はSIGABRTハンドラ内でexitしたりlongjmpしてハンドラから帰ってこ
なかった場合の事を述べている。

858 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:13:43.96 ]
C1X でいうところの _Noreturn 関数なのは abort() のほうだね

859 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:42:52.63 ]
>>857
ん?だからSIGABRTハンドラからabort()の呼び出し側へ戻ることは出来ず
ハンドラ実行後はプログラムが異常終了するんだろ?>>852の通りじゃん

860 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:45:49.77 ]
一応断っとくと、>>852>>851を受けてのことだからね
ちゃんと文脈は読もうね



861 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:56:54.58 ]
てか
assertしといてcloseはしたいという
ありえない話を前提にしても意味がなくね?

862 名前:デフォルトの名無しさん [2011/06/03(金) 23:57:19.13 ]
>>859
日本語訳が必要?
> abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
> 場合に、異常プログラム終了を引き起こす。

>>852
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
こんなこと書いてないじゃん。

>>860
用語間違えたなら言い訳しないでそういえよ。
SIGABRTハンドラはリターンすることも、リターンしないことも可能。
リターンしないのはabort()

863 名前:842 mailto:sage [2011/06/03(金) 23:58:28.43 ]
高度な助言が沢山あってうれしいです。けども質問する内容事態を間違えました…orz
数値計算のシミュレーションをやっていて、変数の中身を追っていたのです.
ofstreamで変数の値を出力させていたのですが、assert()で止まると、
途中の結果が反映されないものだと思い込んでおり、閉じ方を聞いてみたのですが、
再度の確認してみたら普通にデータが書き込まれてました。
助言して下さった皆さん、ありがとうございました。(どうみても無能です)

スレチで申し訳ないのですが、数値計算やシミュレーション関係のプログラムって、
どんな感じでプログラムを書いていくものなのでしょうか?今のところ
#if DLEVEL > 1
ofs << t << "\t" << x << std::endl;
#endif
をあちこち埋め込んでいるのですが、ソースが全体的に汚くて見通しが悪いし、
条件分岐や関数を入れると時間が掛かるので、何かうまい方法はないものかなと


864 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:01:03.80 ]
>>823
関数のスタック領域にメモリを確保してるんじゃない?
グローバル領域かヒープ領域でなら、回避できた経験はあるけど、
詳しいことは、この板のグルを待って

865 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:02:24.14 ]
>>862
英語なんて誰でも読めるよ

>>851が「シグナルハンドラから戻ってきたら」って書いたから
戻れないって書いたんだけど、そんなに不思議?
日本語読めない?アホなの?

866 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:11:04.22 ]
>>865
>> abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
>> 場合に、異常プログラム終了を引き起こす。

つーか、思わずスルーしてたけどそれ訳間違ってんじゃん
アホ過ぎるだろ

867 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:19:28.08 ]
>>865
いや、読めないようだから。
> シグナルハンドラから戻ってきたら
普通に戻れる。戻れないと主張するなら↓このシグナルハンドラはどこに戻るんだよ。
void abort_handler(int sig)
{
}

868 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:23:32.28 ]
>>867
さっすが、英語も日本語も読めないアホは違うね
>>851を読めば、この文脈で戻る/戻らないで指してる場所は
abort()の呼び出し元のことだと分かるだろ?

869 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:25:50.02 ]
>>867
abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
場合"を除き"、異常プログラム終了を引き起こす

unlessすら読めないアホが何言っても無駄

870 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:32:18.35 ]
>>866
ああ、「除く」を余計に削除しすぎた。これはすまない。

>>868
あほ、>>851はabortの実装の事だ。
ライブラリソース見てないから推測だが、シグナルハンドラから戻った後にもう一回自殺するんだろう。

この規格書の原文は? こんなことどこにも書いてないよね。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある



871 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:42:35.94 ]
だから abort() が _Noreturn 関数だってことが言いたかったんだろ
いい加減うざい

872 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:44:15.67 ]
てめーが言いがかり付けてきたんだろ。↓ソースは?
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある

873 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:50:06.53 ]
ぷぷぷwww
英語もろくに読めず、文脈もろくに読めない低能が
言いがかりつけて来たんじゃないの?www

えーと、それとも間違っててごめんって謝って欲しいの?
「そんなに粘着質でアホとは思わなかったよ。こんなアホがこの世に存在するとは思ってなかった。
分かってたら相手にしなかったよ、ごめんねー」

874 名前:デフォルトの名無しさん [2011/06/04(土) 00:59:42.38 ]
やっぱりウソだったんだね。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある

875 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:02:55.30 ]
>>873
自己紹介はいらないよ。

シグナルハンドラから帰るのはシグナル送ったabortの中であることは当たり前だし、
英語読めれば↓こんなウソ書かないもんね。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある

876 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:07:24.15 ]
うわー、自分が訳を間違ったのスルーしてるwww
かっこわるー

877 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:09:20.25 ]
日本語訳が必要? (キリッ
とか書いて間違えるとかwww

878 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:12:51.17 ]
えーと、英語読めるひとにとって>>862の間違いはありえんからね
流し読みでも接続詞の論理構造は把握するから

大方どっかからコピペしてきたんだろ
で、英語読めないから間違いに気付かない

879 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:13:14.76 ]
Cスレは既にあるから次スレは
スレを勃てるまでもないC++の質問はここで
にして欲しい
誰も聞いちゃいないのに毎回毎回おっぱじめる
おっさん同士のオーラルセックスは気持ち悪い

880 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:33:38.92 ]
C++のスレはもうあるしここに閉じ込めとけよ



881 名前:デフォルトの名無しさん [2011/06/04(土) 01:57:04.15 ]
>>876-877
それは謝ったぞ。カッペしたときに抜けた。

でも、英語が読めれば↓こんな間違いしないよな。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある

882 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 07:40:59.58 ]
>>881
カットアンドペーストの失敗?www

問:以下の文の括弧内に文章を入れて正しい文にしなさい

abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
場合に()、異常プログラム終了を引き起こす。

883 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 07:54:39.56 ]
>>863
vectorなりに計算中は溜めておいて
assertの代わりにthrow投げて
catchでvectorの中身をファイルに書き出して終了とした方が
実効速度早いと思うよ

884 名前:デフォルトの名無しさん [2011/06/04(土) 08:36:56.68 ]
>>882
結局、どの言語規格書に↓が書いてあるんだ? 書いてあったとして、ハンドラがリターンしないというのはおかしいと思わないのか? www
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある

885 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 08:59:51.62 ]
>>884
C言語の仕様的に考えて>>868以外の読み方できんだろうが
むしろ、それ以外にどんな意味があると思ったのが知りたいわ

で、コピペミスって言い訳はどうしたの?www

886 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 09:09:13.71 ]
え、もしかしてハンドラの中でreturn文を書いちゃダメって
そういう意味で言ってると思ったの?
だったら>>852の二行目の文と繋がらないじゃん

887 名前:デフォルトの名無しさん [2011/06/04(土) 10:37:14.28 ]
で、「SIGABRTハンドラはreturnしない」と書いてある言語規格書はどこにあるんだい?

888 名前:デフォルトの名無しさん [2011/06/04(土) 11:26:05.69 ]
>>885
それはオレが一番知りたい。「シグナルハンドラから戻ってきたら」と言ったら
「規格書にSIGABRTハンドラはreturnしないと書いてある」と言いがかりをつけられたんだから。
ボンクラの考えることは全くわからん。

>>860>>851への言いがかりだと言ってるんだから、見苦しい言い訳すんなよ。

889 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 16:24:43.42 ]
>>888
> それはオレが一番知りたい。(キリリッ

コピペミスって言い訳も嘘バレバレで笑ったけど
自演もヘタクソだなwww

890 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 16:43:45.56 ]
下記のような事したいのですけど、
ポインタが特定の配列を指しているのかについて調べるときに
アライメントなどの問題が生じることがありますか?


class BOX { ... };

int sizeBuffer = 1024;
int sizeBox = sizeof(BOX);
BOX pDefaultBuffer[1024];

BOX *ptr = ...; // = &pDefaultBuffer[?] or new BOX();

if( ptr >= pDefaultBuffer && ptr < pDefaultBuffer + sizeBuffer )
{
}
else
{
....delete ptr;
}



891 名前:842 mailto:sage [2011/06/04(土) 16:44:45.97 ]
>>883
良さそうな方法ですね。ただ、今に書いているプログラムでは
ループ回数が100万回ぐらいあるので、配列やvectorは利用し難いです。
各関数を通過するときにうける引数の値も確認したいですし。

それと、throwやcatchを使うことで条件分岐やジャンプ命令なんかが
ループ内部に入りそうな気がするのです。
assert()なら、NDEBUGのマクロを定義すれば、空行になってくれるといった
記事を見たことがあったので使っているんですが。

892 名前:デフォルトの名無しさん [2011/06/04(土) 18:06:49.73 ]
>>889
ボンクラは言い逃れも支離滅裂だな。
既に間違いを認めているカッペに突っ込んで話題をそらすしかないんだろうな。

SIGABRTハンドラはreturnしないと書いてある言語規格書はどこにあるんだ?

893 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:09:18.75 ]
プログラムの世界って情報誌とかないんですか?

週刊プログラム

的な。

894 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:10:08.01 ]
C++ だと const int でも配列の宣言の添字に使えることを知ったんですが
int でいいんでしょうか? なんとなっくunsignendのが正しいような気がするんですが
intでいいんですか?

895 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:11:49.91 ]
配列の添え字って負の値も使えるんだよ。


896 名前:デフォルトの名無しさん [2011/06/04(土) 18:16:09.45 ]
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

897 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:26:58.71 ]
>>891
とりあえずマクロ作って1行にまとめてみるとか?
ttp://ideone.com/Qmarv

898 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:34:08.22 ]
>>893
「インターフェース」とか?

899 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:57:26.40 ]
ビルドに時間がかかる巨大なプログラムって動作確認はどうしているのでしょうか。
コード中にミスがあったり、意図したどおりに動くかどうかを確認しようとしてもものすごく時間がかかって不効率のように思います。

900 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:57:56.69 ]
>>892>>896
自演バレたからって発狂すんなよwww
このスレで今sageて無いのお前だけだから一発で分かったわwww



901 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:02:41.74 ]
あぼーんするから名前付けてくれ

902 名前:デフォルトの名無しさん [2011/06/04(土) 19:15:58.08 ]
ついに、進退窮まって自演という事でなかったことにするのか。
バカのくせに負けず嫌い。バカだからリアルでも連敗なんだろうな。www

言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

903 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:19:25.30 ]
ところで真面目な話>>882には何が入るの?

904 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:21:48.45 ]
それは>>902が知っている

905 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:29:46.27 ]
>>882に何が入るかで>>902の完全勝利が決まる
がんばれ

906 名前:デフォルトの名無しさん [2011/06/04(土) 19:35:10.90 ]
話題を逸らすしかないんだろうな。無様すぎる。 言語規格書 www

言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

907 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:44:26.26 ]
なんだ、カッペ抜けは嘘か
英語も読めないアホがスレ荒らすな

908 名前:デフォルトの名無しさん [2011/06/04(土) 20:02:41.18 ]
すでに間違いと認めてるところに粘着して話題を逸らすしかないんだろうな。無様すぎる。

言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

909 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 23:59:34.50 ]
日本語訳が必要?とか言って速攻で訳添削された気分はどう?
それをカッペ抜けとか誤摩化したあげく嘘がバレて
言い逃れできなくなった気分はどう?

910 名前:デフォルトの名無しさん [2011/06/05(日) 00:37:53.26 ]
そろそろよそでやれ



911 名前:デフォルトの名無しさん [2011/06/05(日) 01:46:06.72 ]
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

912 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 10:28:00.38 ]
発狂するほど悔しいのは分かったから
よそでやれ

913 名前:デフォルトの名無しさん [2011/06/05(日) 11:08:32.55 ]
ライブラリコールとシグナルハンドラの区別がついてないんだろうな。

言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

914 名前:デフォルトの名無しさん [2011/06/05(日) 11:42:15.71 ]
> ライブラリコールとシグナルハンドラの区別がついてないんだろうな。

(キリッ

きもいからどっかいけ

915 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 11:58:52.34 ]
>>899
distccで高速化とか?

916 名前:デフォルトの名無しさん [2011/06/05(日) 12:01:31.09 ]
今度は他人のふりして誤魔化そうとしてるようだな。民主並みの見苦しさ。w

言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

917 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:10:36.24 ]
微妙にスレチかもしれないけど、どうしてOSってC言語で書かれるの?
どのプログラム言語でも最終的には機械語に変換されるんだから、別にどんな言語でも書けそうなんだが
OSを開発するに当たって、C言語でなければならない理由を教えてくれ

918 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:16:37.43 ]
歴史上最初に高級言語で書かれたOSが、Cで書かれていたから。でいいかな?

919 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:25:42.37 ]
そもそもUNIXを書くためにCを作ったんじゃなかったっけ?

920 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:30:10.15 ]
>>918-919
つまり、慣例によりCで書かれるだけで、別に他の言語でも書けるってこと?



921 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:52:14.24 ]
寒冷の意味

922 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:54:30.50 ]
C#で作ったOSとかJavaで作ったOSとか一時期聞いた覚えがある

923 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:56:19.47 ]
カーニハンとリッチーが、BCPL(型のないc)でUnix書いてて、
それに型を付けてC言語ができたんじゃなかったけな
C以外の言語だと、c++やjavaでOSが書かれたこともあった気がする
MS-DOSをc++で書いたらとんでもないバイト数になったってジョークもあった

別の言語を作り出したりするのは、既存の資源を廃棄することになるから、
今後も、cが使われていくことになると思うけどな
うん百頁の企画書やSystemCなんかの規格だったり、
言語やライブラリのデバッグに多くのリソースが使われている

既在の環境でそれなりに快適に生活している人が居る以上は、
新しい何かが出来ても移住しないんだよunix書いた人たちがplan9を書いたけども、
結局のとこ流行らなかったって歴史だってある

つまるところ、慣例というよりも、他に選択肢がない

924 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:59:51.04 ]
>>920
すでにC言語以外で書かれたOSは有るよ

925 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 14:02:38.43 ]
汗でしょ、Cとかなかった時代は

926 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 14:41:35.17 ]
>>924
JavaとかC++でしょ?
両方とも、文法や形式がC言語にかなり近いじゃん


927 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 15:09:03.66 ]
>>920
Cはハードウェアへの直接アクセスが簡単なんだ。
他の言語でもライブラリとか使ってアクセスすることもできるけど、Cほど直接的じゃない。
書ける/書けないでいえば他の言語でも書けるけど、Cより楽にかける言語は知らない。

928 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 15:10:49.64 ]
>>926
バイナリに変換されたら表現記法など意味がない
言語が異なれば言語の構文が似てようがまったく別物

近い遠いというのは人間の主観でしかない

929 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 16:20:54.70 ]
Cで書かれたプログラムとc++で書かれたプログラムの
バイナリが近いわけねーだろJK

930 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 18:27:11.51 ]
C++の
#include <cstdio>
int main()
{
std::printf("Hello world.\n");
return 0;
}
と、Cの
#include <stdio.h>
int main()
{
printf("Hello world.\n");
return 0;
}
で、近くないコードが出力され得るとでも?



931 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 18:46:45.08 ]
>>930
詭弁のガイドラインにジャストミートだなw


932 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:09:54.37 ]
>>930
std::cout 使ってみ?

933 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:12:07.02 ]
実行できるという点以外
似てようが似てまいが違いはないと思うがね

だからOSが手続き型で書かれる理由にはならない

934 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:22:29.40 ]
OSにC++がなかなか使われない理由はメモリ管理が主因だと思う

935 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:27:08.52 ]
チューリング完全という意味では
宣言型も手続き型も同じなのに、
手続き型の方が抽象度が低いと認識されてるのは
ハードウェア制御との親和性が高いからでは?

936 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 21:42:37.58 ]
OSを書くには、ない方が良い機能が満載だからだろ
クラスや継承なんてつかったら、vtblなんかのポインタで無駄なメモリを食うだろし
組込み用途につかうもんじゃねーだろ
何がチューリング完全だよ。どこの厨二だ

937 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:32:28.24 ]
>>936
低学歴には難しすぎたね、ごめん。

938 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:50:22.62 ]
手続き型以外 = OOP かよ
OOPなんて只の手続き型の一種

939 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:50:23.51 ]
DLLとかsoで名前マングリングが邪魔になるからじゃないの?

940 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:51:42.04 ]
コンパイラ決め撃ちしたらC++でも大丈夫



941 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:57:21.31 ]
Haskell で OS
programatica.cs.pdx.edu/House/

942 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 23:09:12.56 ]
extern "C" ばかりするのならC++を使う意味がないしな

943 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 01:34:12.52 ]
>>935
それに、宣言形言語(というか関数型言語・論理型言語)は、計算理論・計算可能性理論・記号論理の再帰理論等の実装といってもいいから。

944 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 11:28:40.55 ]
float の==比較を行いたいのですが、
ある数値の次の限りなく小さな次の差分
ulp(Units in the Last Place)を求める関数はありますか?
javaでいうところのMath.ulp(float)です;

945 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 12:34:39.88 ]
float.hかな?

946 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 12:36:31.43 ]
>C言語においては、<float.h>でFLT_EPSILON、DBL_EPSILON、
LDBL_EPSILONという定数が定義されており、それぞれfloat型、
double型、long double型の計算機イプシロンの値となっている。

947 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:00:57.96 ]
>>944
cmathのnextafterf
もしくは直接の比較として
boost::math::float_distance

948 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:06:38.17 ]
ある数値だからfloat.hじゃまずかったかすまん

949 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:09:52.24 ]
>>946
内部表現って知ってる?
ttp://codepad.org/yh9cjksS

950 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:21:56.18 ]
スマートポインタを使わなくてもどこかのクラスに生成を任せて解放をプログラムの最後に実行するようにすればいいと思うんですが
どうでしょうか



951 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:23:02.37 ]
>>950
そんなことするぐらいならスマートポインタ使えばよくね?w

952 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:25:18.25 ]
>>951
そうなんですけど生ポインタのほうがシンプルですので、、、

953 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:56:42.84 ]
プログラムの最後でいいならハンドル形式にしてしまうとか。

954 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 23:59:14.17 ]
スマートポインタだってシンプルじゃねぇか
まあ慣れもあるのかもしれないけど

955 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 07:58:10.11 ]
GCでいいじゃん

956 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 08:51:45.34 ]
他の言語でいいじゃん

957 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 10:58:29.27 ]
すみません、ちょと気になったんですが
C++で構造体やクラスの同名変数のみを自動でコピーするような処理は可能でしょうか?
若干条件付きでも構いませんが、順序はバラバラ(memcpyナシ)でお願いします。

struct A {
int x, y, z;
}
struct B {
int a, x, y;
}

A a;
B b;
autoCopy(a, b); // ← x, yのみコピーされる感じ


958 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 11:44:39.63 ]
出来ない。

959 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:04:26.97 ]
>>957
template<class A, class B>void autoCopy(A & a, const B & b) {a.x = b.x; a.y = b.y;}

960 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:14:16.38 ]
>>959
同名のメンバー名のリストは与えられないという条件に決まってんだろ。ちっとは頭使え。



961 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:21:38.94 ]
Aを全クラスに継承させれば実質できるんじゃね?w

962 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:51:07.87 ]
>>960
それだったら既に>958で答が出ている。
敢えて次善策を提示しているに決まっているだろう。
ちっとはその身体の上に乗っかってる代物を有効活用したらどうだ?

963 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:58:05.25 ]
>>957
設計が間違ってるからそんな欲求が生まれる

964 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 13:01:35.72 ]
同名の変数部分をまとめて構造体にすればいい
まとめて一回でコピーできる


965 名前:944 mailto:sage [2011/06/07(火) 13:19:12.71 ]
>>947
遅れましたが、これを使っていきます。ありがとうございます!

966 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:32:10.20 ]
bccで.tdsや.objを生成しない方法はありますか?

967 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:35:44.11 ]
DBや通信が絡んだりすると、
どうしても一部のメンバ変数のみを送受信したくなると思うのですが、
設計ミスですかそうしたか。


968 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:44:42.83 ]
boost::serialization

969 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 17:28:13.32 ]
>>960
ヘッダ見ろカス

970 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 23:00:51.94 ]
すみません。キー入力の常態を知りたくて
www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/com3-2keycodes.html
ここの一覧全ての定数とWPARAMを、if文で==で比較しているのですが

なぜか定義していないA〜Zのアルファベットキーに反応して
Aだと97の値が来て、VK_NUMPAD1(テンキー1)に一致し、
Sだと115の値が来て、VK_F4(F4キー)に一致し、
Dだと100の値が来て、VK_NUMPAD4(テンキー4)に一致してしまいます。

なぜこんな事になるのでしょうか?



971 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 23:50:31.75 ]
WM_CHARはキャラクタ−コード。
WM_KEYDOWN等は仮想キーコード。
VK_???は仮想キーコード。
なので、

case WM_CHAR:
 if(wParam == 'A') {
  ...
とすれば拾えるハズ


972 名前:970 mailto:sage [2011/06/08(水) 02:01:02.82 ]
>>971
ご助言を元にいじって、仮想キーを != WM_CHAR で取得する事で解決できました。
勉強になりました。ありがとうございます。

973 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 11:59:43.70 ]
void func(int n)
{
assert(n>0);
if(!(n>0)) throw func_error(n) ;
//・・・
};

アサーションって運が悪いとデバッグ時に気がつかないかもしれないから(例えばfunc(rand())みたいな場合)
上のようにリリース時のチェックも追加したほうがいいと思うんだが、なぜみんな書かないの?


974 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 12:02:28.20 ]
リリース時もチェックするならなんでassertするの?

975 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:04:08.48 ]
つまりassert不要論

976 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:26:58.45 ]
表示処理なんかでエラーが雪崩れないところ用にlogging_assertみたいなc/c++標準機能が欲しいね

977 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:30:07.19 ]
stderrを表示処理に使うのはいかがなものか

978 名前:デフォルトの名無しさん [2011/06/08(水) 13:30:00.24 ]
ZZ型の変数を10進数から16進数にするにはどうすればいいですか??


979 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 13:59:43.82 ]
>>978
変数自体は進法は関係がない。
表示などの目的で16進数に変換したいなら、printf()系で変換するのが手っ取り早い。

980 名前:デフォルトの名無しさん [2011/06/08(水) 14:14:44.98 ]
>>979
解答ありがとうございます。
表示目的ではないのですが、sprintfやstringstreamなどで試してみてもZZ型が
16進文字列になりませんでした。




981 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 14:18:25.27 ]
ZZ型ってNTLとやらの多倍長整数でいいのかな?
NTLにZZ型を扱う文字列関数(printfやitoa相当のもの)がないなら自分で書くしかない

982 名前:デフォルトの名無しさん [2011/06/08(水) 14:21:50.77 ]
はい。
やっぱり自分で書くのが一番なんですかね。ありがとうございました。
参考になりました。

983 名前:デフォルトの名無しさん [2011/06/08(水) 14:24:18.69 ]
static char a[] = "0123456789ABCDEF";
long n = (long)(zz % 16);
s = a[n] + s;

984 名前:デフォルトの名無しさん mailto:sega [2011/06/08(水) 14:34:02.59 ]
今開いてるディスクリプタの一覧を取得する方法
ってありますか?

985 名前:デフォルトの名無しさん [2011/06/08(水) 14:40:42.61 ]
>>984 標準的な方法は存在しない
d.hatena.ne.jp/ihiroky/20101122/1290409915

986 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 15:17:13.53 ]
>>985
マジすか。 標準Cライブラリも案外だらしないな・・・
しかたない。 /procの下でも読みます。

987 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 17:03:01.18 ]
>>986
そもそも標準ライブラリはディスクリプタを扱わない。
∵そう言う方法で管理しないシステムで使うことも考慮されているから。

988 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 17:21:48.39 ]
>>987
あーそういえばそうだったね
低レベルばっかり触ってるからうっかりしてた

989 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:18:04.28 ]
ファイルのアドレスとデータを指定して書き換えたい
ただしかなりファイルが大きいので一部のために全部書き換えることはしたくない
固定長のデータ等扱うのに需要はあると思うけど
どれ使っていいかわからない



990 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:19:43.01 ]
日本語でOK。



991 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:46:47.33 ]
つ[fopen(), fclose(), fseek(), fread(), fwrite()]

992 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:48:16.87 ]
>>989
"r+"でfopen 〜 fseek 〜 fwriteやfprintfで書き込み
fstream 〜 seekp 〜 write や << で書き込み

993 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 20:05:38.45 ]
>>990
はずかしいね

994 名前:デフォルトの名無しさん [2011/06/08(水) 22:03:41.24 ]
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ

995 名前:デフォルトの名無しさん [2011/06/09(木) 00:20:38.27 ]
(´・ω・`)






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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