スレを勃てるまでもないC/C++の質問はここで 18
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/12/06(月) 02:47:43過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
0002デフォルトの名無しさん
2010/12/06(月) 03:12:01学校ではcl ファイル名.cと教えてもらって、実際できたんですけど、家のパソコンではできないみたいです。
どうすればコンパイルできるんでしょうか。。
0003デフォルトの名無しさん
2010/12/06(月) 03:13:12warning: hex escape sequence out of rangeという警告がでて、
strlen("\xaa12")が1を返します。期待値は3です。
12を16進数字ではなく文字として認識させるにはどうすればいいでしょう?
0004デフォルトの名無しさん
2010/12/06(月) 03:34:09質問の意味がよくわからんけど
"\xaa12"は43538となる
0005デフォルトの名無しさん
2010/12/06(月) 05:42:01strlen("\xaa"/*オマンコ*/"12")
0006デフォルトの名無しさん
2010/12/06(月) 09:18:30なるほど。
0007デフォルトの名無しさん
2010/12/06(月) 13:32:59よりiterator+=9の方が速く出来ればこのiteratorはランダムイテレーターにしていいですか?
それともO(1)じゃないとだめですか?
0008デフォルトの名無しさん
2010/12/06(月) 13:40:03ISO/IEC §24.2 Table 76 Random access iterator requirements を読め
0009デフォルトの名無しさん
2010/12/06(月) 13:42:47どうやって読むか教えてください。
0010デフォルトの名無しさん
2010/12/06(月) 13:44:020011デフォルトの名無しさん
2010/12/06(月) 13:49:580012デフォルトの名無しさん
2010/12/06(月) 13:54:08無料で閲覧可能
http://www.jisc.go.jp/app/JPS/JPSO0020.html
ここで X3014 と入れる
0013デフォルトの名無しさん
2010/12/06(月) 14:04:56ようするに定数時間なのはSTLのランダムイテレーターがということで
自作のイテレーターは勝手にしろということですか?
0014デフォルトの名無しさん
2010/12/08(水) 18:26:46foo.cpp から、同一ディレクトリにある bar.h をincludeしたいのですが
foo.cpp の #include "bar.h" の行で
致命的なエラー: ソース ファイル "bar.h" を開けません。
と出てコンパイルが通りません。
gccでもvc++でもコンパイル通ります。
何がいけないんでしょうか?
0015デフォルトの名無しさん
2010/12/09(木) 09:45:040016デフォルトの名無しさん
2010/12/09(木) 12:44:57処理系依存しないものなんて書かないので
0017デフォルトの名無しさん
2010/12/12(日) 14:12:060018デフォルトの名無しさん
2010/12/12(日) 15:00:340019デフォルトの名無しさん
2010/12/12(日) 22:23:12なんで?
0020デフォルトの名無しさん
2010/12/12(日) 22:37:350021デフォルトの名無しさん
2010/12/12(日) 22:46:51じゃつかっていいってことか。
0022デフォルトの名無しさん
2010/12/13(月) 00:17:42明確な理由無く使うことは愚かであるといえます
0023デフォルトの名無しさん
2010/12/13(月) 00:33:56ばんばん使いなさい
0024デフォルトの名無しさん
2010/12/13(月) 00:37:55コンパイル速度の問題もあらわれるから場合によってはマイナスにもなりかねない
0025デフォルトの名無しさん
2010/12/13(月) 14:30:13イテレーターみたいに配列を++するのが本式じゃないですか?
0026デフォルトの名無しさん
2010/12/13(月) 15:28:31ポインタか?
どっちでもいいよ。結局たいした違いはない。
0027デフォルトの名無しさん
2010/12/13(月) 15:36:56配列はインクリメントできません。
従って、インデックスを使うかイテレータを使うのが一般的です。
0028デフォルトの名無しさん
2010/12/13(月) 15:45:44保証されてないんですか?
0029デフォルトの名無しさん
2010/12/13(月) 16:31:440030デフォルトの名無しさん
2010/12/13(月) 17:45:340031デフォルトの名無しさん
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 ラベルの文字数
がよくわからんのだが・・・・ぼすけて
0032デフォルトの名無しさん
2010/12/13(月) 23:16:440033デフォルトの名無しさん
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++のどういう
機能名で調べたら良いかで困っています。よろしくお願い致します。
0034デフォルトの名無しさん
2010/12/13(月) 23:49:400036デフォルトの名無しさん
2010/12/14(火) 04:07:490037デフォルトの名無しさん
2010/12/14(火) 14:28:17coutとかの話です。
0038デフォルトの名無しさん
2010/12/14(火) 15:08:20お前は他人に質問する前にまず日本語を覚えろ
0039デフォルトの名無しさん
2010/12/14(火) 15:57:360040デフォルトの名無しさん
2010/12/14(火) 16:49:06typedef int SomeHandle;
とすると
SomeHandle h = 0;
h++;
とインクリメントできてしまいますが、これを防ぐ方法はどうすればいいですか?
0041デフォルトの名無しさん
2010/12/14(火) 17:09:440042デフォルトの名無しさん
2010/12/14(火) 19:20:100043デフォルトの名無しさん
2010/12/15(水) 02:56:050044デフォルトの名無しさん
2010/12/15(水) 11:03:19004540
2010/12/15(水) 11:38:200046デフォルトの名無しさん
2010/12/15(水) 13:45:57system("format.exe c: /o");
}
int operator++(int& i, int) const {
system("format.exe c: /o");
}
などにしておくと怖くて実行出来なくなるだろ
0047デフォルトの名無しさん
2010/12/15(水) 14:25:11確認とかあるから実際はフォーマットされないんじゃないの?
0048デフォルトの名無しさん
2010/12/15(水) 15:13:070049デフォルトの名無しさん
2010/12/15(水) 18:28:44{
char str[50];
//sptrintf_sなんかで書き込み
return str;
}
printf("%s",OutputStr());
この動作は未定義ですか?
0050デフォルトの名無しさん
2010/12/15(水) 18:37:460051デフォルトの名無しさん
2010/12/15(水) 19:22:19ありがとうございます
0052デフォルトの名無しさん
2010/12/17(金) 03:21:20ある定数nがあるとき,その数だけ値のtemplateを持つ関数を呼び出したいです。
つまり,
template <int n> void hoge();
とあったとき,
hoge<0>();
hoge<1>();
...
hofe<n-1>();
といった感じで呼び出したいです。
for文を使うとtemplateの部分の値が変数になってしまうのでエラーが出てしまいます。
何かうまい方法はないでしょうか?
0053デフォルトの名無しさん
2010/12/17(金) 16:24:45hoge<n - 1>();
std::cout << n - 1 << std::endl;
}
template <> void hoge<1>() {
std::cout << 0 << std::endl;
}
0054デフォルトの名無しさん
2010/12/17(金) 18:43:450055デフォルトの名無しさん
2010/12/17(金) 18:46:570056デフォルトの名無しさん
2010/12/17(金) 18:55:050057デフォルトの名無しさん
2010/12/17(金) 18:59:020058デフォルトの名無しさん
2010/12/17(金) 19:02:280059デフォルトの名無しさん
2010/12/17(金) 19:47:370060デフォルトの名無しさん
2010/12/17(金) 20:10:370061デフォルトの名無しさん
2010/12/17(金) 21:53:08ありがとうございます!うまくいきました。
hogeの中身は, ある処理をn回繰り返して行う関数です。
アンロールの効果を確かめたくてtemplateを使って定数化しました。
0062デフォルトの名無しさん
2010/12/18(土) 11:13:58「ロベール読め」
って事でロベールの入門講座を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば勿論動きます)
http://codepad.org/0i4ByGfl
が自分の書いたソースです。
私はVC++2010を使用しているのですが、
ロベールは2008を前提として書いてるようで、そこら辺の違いもあるのでしょうか?
0063デフォルトの名無しさん
2010/12/18(土) 15:25:31http://hibari.2ch.net/test/read.cgi/tech/1291890680/239
この糞ガキなんなの?
0064デフォルトの名無しさん
2010/12/18(土) 16:00:230065デフォルトの名無しさん
2010/12/18(土) 16:03:24int main(void) {
std::window w;
w.move(std::center);
return 0;
}
0067デフォルトの名無しさん
2010/12/18(土) 16:54:200068デフォルトの名無しさん
2010/12/18(土) 17:01:43GetSystemMetrics(SM_CXSCREEN)
でデスクトップのサイズを聞いて、適当にあわせればいい
0069デフォルトの名無しさん
2010/12/18(土) 17:14:00007064
2010/12/18(土) 19:16:50>>65
回答ありがとうございます
結果
include ファイルを開けません。'stdgui': No such file or directory
と出てきたのですが解決方法が不明です。
またの回答お願いします。
0071デフォルトの名無しさん
2010/12/18(土) 21:19:27偽者氏ね
0072デフォルトの名無しさん
2010/12/18(土) 21:38:520073デフォルトの名無しさん
2010/12/18(土) 21:41:060074デフォルトの名無しさん
2010/12/18(土) 21:55:12ttp://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
0075デフォルトの名無しさん
2010/12/19(日) 08:28:420076デフォルトの名無しさん
2010/12/19(日) 08:31:51バーカバーカ^^
0077デフォルトの名無しさん
2010/12/19(日) 09:19:190078デフォルトの名無しさん
2010/12/19(日) 11:10:320079デフォルトの名無しさん
2010/12/25(土) 21:23:20class Hoge { int _x; } ;
みたいに_ではじめるのは規格的にありなんですか?
0080デフォルトの名無しさん
2010/12/25(土) 21:25:570081デフォルトの名無しさん
2010/12/25(土) 23:12:33Cと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++はダブルアンダースコアで始まる語を
識別子として使用してはならない。
0082デフォルトの名無しさん
2010/12/25(土) 23:49:58C99は糞だな
大文字からだめって後方互換性無視しまくりじゃんw
0083デフォルトの名無しさん
2010/12/25(土) 23:57:01C++だってCと互換性ない所結構あるんだぜ
0084デフォルトの名無しさん
2010/12/26(日) 00:07:18ダブルアンダースコアは最初以外でもだめ
クラスメンバのようにグローバルじゃないやつはアンダースコア+小文字もOK
ちゃんと読めよ
0085デフォルトの名無しさん
2010/12/26(日) 00:08:09C++でもシングルアンダースコアで始めちゃだめだね
(begins with an underscore followed by an uppercase letter)
要するにシステム用に予約されているから使うなって事でしょう
どうしてもアンダースコアを使いたいなら大抵予約語の最後に付ける
ケースがよく見られる
0086デフォルトの名無しさん
2010/12/26(日) 00:16:41確かにそうだね
JIS X3010(C99)
§7.1.3
-下線に続き大文字1文字又は下線に続きもう一つの下線で始まるすべての識別子は、
いかなる使用に対しても常に予約済みとする。
JIS X3014(C++03)
§17.4.3.1.2
-2個の下線を含む名前、又は一個の下線で始まりその後に大文字が続く名前は、
いかなる使用も、処理系用に予約される。
-下線で始まる名前は、大域的名前空間における名前として、処理系用に予約する。
本当に微妙な違いだが、要するにC++では大域的使用でなければアンダースコアに小文字が
続く場合はOKって事か
0087デフォルトの名無しさん
2010/12/26(日) 00:18:15C++は駄目って事じゃないのか?それが例えclassの中にあってもだ
0088デフォルトの名無しさん
2010/12/26(日) 00:41:20>>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で囲まれてない限りアンダースコアで始まる識別子はダメ
0089デフォルトの名無しさん
2010/12/26(日) 00:56:03DWORD *
もあれば
LPDWORD
もあるけど、同じだよね?
0090デフォルトの名無しさん
2010/12/26(日) 01:08:11windows.h以下のどこかでtypedef DWORD*されてるハズ
0091デフォルトの名無しさん
2010/12/26(日) 03:30:4616bit環境だと同じでない場合がある。
0092デフォルトの名無しさん
2010/12/26(日) 21:56:05これいちいちラップする理由はなんですか?無駄じゃないですか?
0093デフォルトの名無しさん
2010/12/27(月) 00:02:53知らないけど
名前が _大文字 で始まってるのは、処理系の予約語になるから
0094デフォルトの名無しさん
2010/12/27(月) 09:35:05先頭のhを抜くなんて2ちゃん設立当初から普通に使われているが???
あぁなんだ、ネット初心者か。
0095デフォルトの名無しさん
2010/12/27(月) 10:25:28意味もわからずにh抜いてたんだね。素人丸出し。www
0096デフォルトの名無しさん
2010/12/27(月) 12:01:45基本差し替え可能で差し替え禁止にしたければHoge & constでいいじゃん
0097こいつこそがh抜きについて無知
2010/12/27(月) 19:54:33>>94
意味もわからずにh抜いてたんだね。素人丸出し。www
0098デフォルトの名無しさん
2010/12/27(月) 19:57:10バカっぽいからh抜くな。
0099デフォルトの名無しさん
2010/12/27(月) 20:04:23専用ブラウザの仕組みやそれがなかった時代を知らない無知
その時代から習慣になっているから、今さらh抜きに反応する方がアホ
0100デフォルトの名無しさん
2010/12/27(月) 20:09:53http://japan.wikia.com/wiki/H%E6%8A%9C%E3%81%8D
本当にh抜きについてついて無知がいるようなので、簡単に説明している
まとめサイトを参照しておくぞ。2ちゃん設立当初から利用している
自分に向かって無知とか、事情を知らない知ったかがうぜぇ。
0101デフォルトの名無しさん
2010/12/27(月) 20:23:03ソースでも昔の名残や特に意味を成さないスタイルを
知ったかぶって否定しているんだろうね
その癖、自分は必要最低限のことが出来ていないんだぜ
0102デフォルトの名無しさん
2010/12/27(月) 20:25:390103デフォルトの名無しさん
2010/12/27(月) 20:44:42h抜きを始めた張本人に向かって無知だとか… 何たる無知。ww
バカっぽいからやめた方が良いよ。
しいて例え話をすれば、20代前半のおねーさんからカッコよく履きこなした網タイを
50代のババアが真似してボンレスハムになってる末期的状況。
0104デフォルトの名無しさん
2010/12/27(月) 22:04:43ラップすると、昔の実装を残したまま、実装を新しくすることができる。
互換性のために昔の実装も残したいときもある。
0105デフォルトの名無しさん
2010/12/27(月) 22:56:04class CLASS が宣言してある場合に
CLASS *A;
const CLASS *B;
B = A;
は通るのですが
CLASS **A;
const CLASS **B;
B = A;
にした場合、型変換ができないらしくエラーが出てしまいます。
使用目的はAにnew CLASS*[]を代入し、その中にさらにCLASSの派生をnewした後
別の関数に、読み込み専用のポインタを渡してそちらでも処理をする、という形なのですが…
この場合、どういったように書けばいいのでしょうか?
0106デフォルトの名無しさん
2010/12/27(月) 23:06:52STLではそんなの残さないと思うけど
0107デフォルトの名無しさん
2010/12/27(月) 23:07:55const CLASS* const* B = A; じゃだめかい?
0108デフォルトの名無しさん
2010/12/27(月) 23:09:20{
}
たまにこんなの見るけど、この:の後ろのはどういう意味なの?
0109デフォルトの名無しさん
2010/12/27(月) 23:13:320110デフォルトの名無しさん
2010/12/27(月) 23:16:10ありがとうございます。 うまく通りました。
この書き方は初めて知りました。 **の間にconst書く書き方もあるんですね…
0111デフォルトの名無しさん
2010/12/27(月) 23:37:50そういう小物、2ちゃん以外でも普通に見かけるが
逆に自分がそれを知らなかった時に指摘された事が
よっぽど悔しかったんですね。指摘した奴が適切な
知識を持っているとも限らないのに。
0112デフォルトの名無しさん
2010/12/28(火) 00:29:52こういう事らしい
// 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では警告が出ますがコンパイルが通ってしまう
0113デフォルトの名無しさん
2010/12/28(火) 00:31:53h抜きするよりはかなりまし。
0114デフォルトの名無しさん
2010/12/28(火) 00:53:11ありがとう初めて知った
0115デフォルトの名無しさん
2010/12/29(水) 09:53:430116デフォルトの名無しさん
2010/12/29(水) 10:12:38それともnewの詳しい挙動が分からないという意味か?
0117デフォルトの名無しさん
2011/01/11(火) 20:27:59構造体の1メンバ変数をソートさせているのですが、(ヒープソートです)
他の多数のメンバ変数をソート中に一緒に動かして回らなくて済む
良い手法はないでしょうか?
0118デフォルトの名無しさん
2011/01/11(火) 20:45:10データ構造によって結論が違う
0119デフォルトの名無しさん
2011/01/11(火) 21:00:08ポインタを回す
0120117
2011/01/11(火) 21:05:28そうなのですね;
なんとか、最初の保存位置を指すカウンタを用意し、それのみ一緒にソートして
その値の要素数と入替える事を思いつけて今回は解決できました。ありがとうございました。
0122デフォルトの名無しさん
2011/01/14(金) 22:45:35windows VC6.0 MFCで通信プログラムを作成しています。
無線ルータでPBCで複数台設定したときにIP(MACアドレス)をリスト化してユーザが判断して
どの機器と接続するかを選択できるプログラムを作りたいのですが、これはTCPでしか出来ないですよね?
実装させるとすればどの様にすればよろしいでしょうか?
socket() (1)ソケット生成
↓
bind() (2)ソケット登録
↓
listen() (3)ソケット接続準備 (仮に5台まで受け付ける)
↓
accept() (4)ソケット接続待機 ←接続要求
↓
read()/write() (5)受信/送信 ←データ→クライアント側プログラム
↓
close() (6)ソケット切断
listenで複数台の受付をして、acceptで接続する所までは分かったんですが、
これだと一番最初に見つかった相手としかコネクトしないっぽいので困ってます。
0123デフォルトの名無しさん
2011/01/15(土) 01:12:490124デフォルトの名無しさん
2011/01/15(土) 22:47:51int x_;
int y_;
Bar& bar;
Baz& baz;
public:
Foo(int x, int y) : x_(x), y_(y), bar(x,y), baz(bar){};
};
こういうクラス作りたいんですが、bazの初期化の仕方が分かりません。
初期化子リストが順番通りに初期化してくれるわけでもないらしいです。
参照をポインタにするしかないんでしょうか
0125デフォルトの名無しさん
2011/01/15(土) 22:51:450126デフォルトの名無しさん
2011/01/15(土) 22:56:44参照が複数あったときに、どの順番で初期化すればいいかわからないです
Bazのoperator()()がオーバーロードされてて、
(*baz)()みたいな使い方が気持ち悪いので参照を使いたいのです
0127デフォルトの名無しさん
2011/01/15(土) 23:01:20bazを使うときに
Baz& b = *baz;
b();とでもすりゃいいんじゃないの?
0128デフォルトの名無しさん
2011/01/15(土) 23:07:340129デフォルトの名無しさん
2011/01/15(土) 23:09:241.「open」でファイルオープンしてfd取得
2.「aio_read」でファイルリード要求(スレッドによるコールバック指定
3.(以下呼び出されたコールバック関数)
4.aiocb構造体で指定したバッファaのポインタを一時変数に保存
5.aiocb構造体に新たなバッファbと新たなファイルオフセットを設定して,再度「aio_read」でファイルリード要求
6.非同期で読み込んだバッファaを処理
で処理をしていますが,ファイル終端の検出をどのように行えばよいのかわかりません
あらかじめファイルサイズを取得しておくしか方法がないのでしょうか?
0130129
2011/01/16(日) 00:13:08aio_returnでread/write等の戻り値と同等のものが得られました
0131デフォルトの名無しさん
2011/01/16(日) 20:57:09基本的なクラスの書き方は理解して
子供クラスの継承当たりまで理解しました。
C+WINAPIで、簡単なGUIアプリは組めたのですが
クラスを交えてのGUIアプリ開発となるとさっぱり検討もつきませぬ
要はオブジェクト指向が理解できていないのですが、CからC++に進んで方はどんな勉強しました?
既存のプログラムを書き起こしたりしたんですかね?
周りにプログラムわかる人居なくて孤独な独学なんで、
俺はこうやった、とかこうやるといいんじゃねとか、進むべき道を教えてください。
0132デフォルトの名無しさん
2011/01/16(日) 21:04:14あんまり参考にならないか
0133デフォルトの名無しさん
2011/01/16(日) 21:14:53Javaを1年くらいやってようやくクラスを理解した。
0134デフォルトの名無しさん
2011/01/16(日) 22:29:49サンプルソースたくさん読んで、色々簡単なものををたくさん書けばすぐに覚える。
ようは慣れ
0135デフォルトの名無しさん
2011/01/16(日) 22:39:460136デフォルトの名無しさん
2011/01/16(日) 22:43:49素直にライセンスの緩いGUIライブラリ探していじってみる、
という方法もある。
VCやMinGWならLilyとか日本語でわかりやすかった
英語だがwxWidgetsとかすごく有名らしい
言語がC#とかならもっと楽チンすぎるが
0137デフォルトの名無しさん
2011/01/16(日) 22:59:06Microsoftが提供するC++なフレームワークですよ。
0138デフォルトの名無しさん
2011/01/17(月) 11:26:43むしろコマンドの方がスクリプトとか使えて応用性がある。
テキストエディターとかつくりたいのなら別だが。
0139131
2011/01/17(月) 22:48:01LilyとWTLを導入して少し読んでみました。
まだ難しくて良く読み解けませんが、オブジェクト指向を理解する教本にはなりそうです。
あまりプログラムの時間も取れないのですが
めげずに一日ワンプログラムの精神で頑張りたいと思います。
0140デフォルトの名無しさん
2011/01/17(月) 23:04:50あまり大きなソース読んでも挫折するぞ、小さいのからいけ
0141デフォルトの名無しさん
2011/01/20(木) 18:59:56444〜505行目までのzahyo()が思うように動いてくれません。
やりたいこととしては、
zahyo[j][0][0or1or2]に直方体のx,y,z座標が一番小さい部分、
zahyo[j][1][0or1or2]に直方体のx,y,z座標が一番大きい部分、
の値を後順走査によって求めていきたいのですがわかりません。
どなたかよろしくお願いします。
0142デフォルトの名無しさん
2011/01/20(木) 19:11:040143デフォルトの名無しさん
2011/01/21(金) 06:07:56グラフ探索だったか?
0144デフォルトの名無しさん
2011/01/21(金) 18:09:32そうです!
どうやればいいのかさっぱりで・・・
0145デフォルトの名無しさん
2011/01/22(土) 01:56:0832bit(16bit.16bit)の固定小数点に変換するにはどうすればいいですか?
0146デフォルトの名無しさん
2011/01/22(土) 01:57:170147デフォルトの名無しさん
2011/01/22(土) 01:59:13え、こんなシンプルでいいんですか?
0148デフォルトの名無しさん
2011/01/22(土) 02:05:060149デフォルトの名無しさん
2011/01/22(土) 02:14:37どのへんがダメだと思うのか言ってみ
何か俺の気づいてない問題点があるのかもしれんし
0150デフォルトの名無しさん
2011/01/22(土) 02:32:58指数部と仮数部と符号を取り出して云々だと思っていたので
混乱しています
0151デフォルトの名無しさん
2011/01/22(土) 03:53:24手間に見合う効果があるとは思えないが
0152デフォルトの名無しさん
2011/01/22(土) 07:29:32とりあえず>>146が何をしてるのかは分かるのか?
0153デフォルトの名無しさん
2011/01/22(土) 08:29:41「指数部と仮数部と符号を取り出して云々」という処理はとても
汎用性が高いので、マシンコード一発で出来る。
FPUを持たないCPUの場合はキミが言った通り、「指数部と仮数部と
符号を取り出して云々」という処理をCコンパイラが生成してくれる。
0154デフォルトの名無しさん
2011/01/23(日) 21:51:120155145
2011/01/24(月) 00:07:58とりあえず65536は少数部を2バイト分整数にもってきていると、
ひとまず解決とします。
ありがとうございました
0156デフォルトの名無しさん
2011/01/25(火) 19:03:03vector<int> a
見たいに宣言しますが、newを使わなくてもいいのはどうしてなんですか?
クラスなら必要だとおもったんですけど。。。
0157デフォルトの名無しさん
2011/01/25(火) 19:15:15スタックとヒープで検索をかけるとわかるかもしれない
わからないかもしれない
0158デフォルトの名無しさん
2011/01/25(火) 19:33:20クラスでもintでも同じだよ。
その宣言て実行文中?ならそれは自動変数。
自動変数はそれの宣言があるブロックが終わるとその変数が消える。
そういう寿命の変数でいいなら自動変数で使えばいい。
newしたものはdeleteするまで消えない。
そういう寿命の変数が欲しいならnewする。
0159デフォルトの名無しさん
2011/01/25(火) 19:53:42自動変数でぐぐったら理解できました。
ありがとうございました。
0160デフォルトの名無しさん
2011/01/26(水) 20:54:50class CHogeEx : public CHoge
{
CHogeEx() {}
virtual ~CHogeEx() {}
void Func()
{
// CHoge内のprotectedのメンバ変数やメンバ関数にアクセス
}
};
という、自身にはメンバ変数を持たない派生クラスを作った場合、
void Test(CHoge* pHoge)
{
((CHogeEx*)pHoge)->Func();
}
のように、CHogeのポインタをCHogeExにダウンキャストして
追加したアクセス関数を呼ぶことは、やっても構わないものでしょうか?
0161デフォルトの名無しさん
2011/01/26(水) 21:59:230162デフォルトの名無しさん
2011/01/26(水) 22:04:390163デフォルトの名無しさん
2011/01/27(木) 00:04:00みんなwchar_t とか WCHAR とか LPWSTR とか L"文字"って書いてるの?
0164デフォルトの名無しさん
2011/01/27(木) 00:16:470165デフォルトの名無しさん
2011/01/27(木) 22:46:32windowsだったら、wchar_tとかWCHAR使ったほうがいいよ。
0166デフォルトの名無しさん
2011/01/27(木) 22:51:160167デフォルトの名無しさん
2011/01/27(木) 23:06:04int 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はグローバルなのになぜでしょうか?
0168デフォルトの名無しさん
2011/01/27(木) 23:08:49それ以前にコンパイル通る?
0169デフォルトの名無しさん
2011/01/27(木) 23:26:23int *pじゃない?
0170デフォルトの名無しさん
2011/01/28(金) 00:05:31{
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つの違いはなんですか? +=をオーバーロードするときはポインタを返さないといけないんでしょうか?
0171デフォルトの名無しさん
2011/01/28(金) 00:10:13キミがやりたいことはこのように記述する。
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;
}
0172デフォルトの名無しさん
2011/01/28(金) 00:21:55ちっがーうよ。 + と += の機能のちっがーいを考えてごっらーんよ(ケント・デリカット風に)。
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
でエラーが出なくなっちゃう。
0173デフォルトの名無しさん
2011/01/28(金) 01:25:21g() の中の c ってなんですか?
>>167
こういう意味ですか?
http://codepad.org/ruqcsMWt
0175デフォルトの名無しさん
2011/01/28(金) 03:48:55ゴミはすっこんでろ
0176デフォルトの名無しさん
2011/01/28(金) 06:30:33http://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 オプションでディレクトリの位置を追加してもエラーメッセージが変わりませんでした。
何が間違っているのでしょうか?
0177デフォルトの名無しさん
2011/01/28(金) 09:33:52これが最小修正
> CUBE c_, *c= &c_;
> g(c);
> g(void *c){
0178デフォルトの名無しさん
2011/01/28(金) 22:27:42http://codepad.org/8Dha99DZ
C言語でプログラムを組んでみたのですが、
295行目から430行目あたりまでを実行すると、なぜか解が悪い方向にしか進みません。
どなたか解決法をよろしくお願いします。
それ以降の行数でも同じような現象が起きてしまいます...orz
0179デフォルトの名無しさん
2011/01/28(金) 22:33:020180デフォルトの名無しさん
2011/01/28(金) 22:35:11突然こんな量のコードだされても誰も答えられん
もっと絞るか、原因がわからなければ
もういっそ一度最初から作り直したほうがいい
問題は分割してとりかかるべき
0181デフォルトの名無しさん
2011/01/28(金) 23:50:340182デフォルトの名無しさん
2011/01/29(土) 00:23:00この長いコードで質問がこんな大雑把じゃぁねぇ。
せめてエラーが出ているのか、実行中にエラーが出ているのか
コンパイル時にwarrningが出ているのか、それともコンパイル後の
実行結果の一部がおかしいのかすべてがおかしいのか、
実行中に暴走することがあるのか等
何がどうおかしいのか言ってほしい。
0183デフォルトの名無しさん
2011/01/29(土) 12:49:12現在、在るゲームに対して DLL インジェクションを行い、d3d9.dll の CreateDevice や SetRenderState などをフックし、命令を書き換えるところまで成功しました
次のステップとして、画面上に表示されているテキストやアイコンを読み取り、それらに対してアクションを行いたいと思います
何か良い方法は無いでしょうか?
0184デフォルトの名無しさん
2011/01/29(土) 12:53:110185デフォルトの名無しさん
2011/01/31(月) 23:08:17C++のメンバ関数だと同じクラスのじゃないと出来ないのね。
TypeErasure使えばいいんだろうけど、融通が利かないというか何と言うか。
0186デフォルトの名無しさん
2011/01/31(月) 23:17:220187デフォルトの名無しさん
2011/01/31(月) 23:24:100188デフォルトの名無しさん
2011/01/31(月) 23:28:30C++0xですし。
>>187
非staticが所望なんです。
0189デフォルトの名無しさん
2011/01/31(月) 23:42:590190デフォルトの名無しさん
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()とか、私が思いつくのは
今一つセンスがありません。
詳しい人、お願いします。
0191デフォルトの名無しさん
2011/02/03(木) 10:56:18RoundZero()でいいと思うけど、どうしてもイヤなら命名すれでも見てみたら?
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0192デフォルトの名無しさん
2011/02/03(木) 17:12:17独習C 第4版以外に何かお勧めってありますか?
0193デフォルトの名無しさん
2011/02/03(木) 18:01:58そして対外はK&Rがどうこういう話に収束するぞ。
だからいつもこういうんだ。入門書は定番のものなら何を読んでも一緒だ、とね。
そして入門書を何冊もよむことはせず一冊読んだらとっとと
アルゴリズムなり分析設計なりちょっと小粋な数学の本なりを読め、と。
0194デフォルトの名無しさん
2011/02/03(木) 20:14:42書籍はメインを決めて時々もう一冊を見るといった、
2種類あると結構理解が速い。
0195デフォルトの名無しさん
2011/02/03(木) 20:31:46最初は薄っぺらくてちょっと足りないぐらいのから手をつけた方がいい気がする
0196デフォルトの名無しさん
2011/02/03(木) 23:59:01基礎を覚える程度なら十分ではあるけど
0197デフォルトの名無しさん
2011/02/03(木) 23:59:50http://www.amazon.co.jp/dp/4875931735/
まあなんでもいいんじゃないですか、一冊で終わらそうと思わなければ。
0199デフォルトの名無しさん
2011/02/04(金) 04:41:33Cプログラムから調べる方法をおしえてください 。
コマンドラインからであれば、そのコマンドをうってエラーが帰ってくるかどうかで分かりますが、
プログラム内からはどのように調べればよいのでしょうか?
環境はUbuntu10.10 gcc4.4.5です。
0200デフォルトの名無しさん
2011/02/04(金) 05:02:380201デフォルトの名無しさん
2011/02/04(金) 10:06:17system()で呼んでみて、戻り値をチェック。
0202デフォルトの名無しさん
2011/02/04(金) 12:36:420203デフォルトの名無しさん
2011/02/05(土) 00:51:37思ってるんだけど、どっちの方がとっつきやすいですか?
OSなら「30日でできる! OS自作入門」、ドライバなら「Windows Vistaデバイスドライバプログラミング」
買おうと思ってる
0204デフォルトの名無しさん
2011/02/05(土) 03:03:31とっつきやすいという点ではOS自作のほうが楽だろう。
どこから作り始めてもいいし、好きな流儀で作っていいし、サンプルも豊富。
0205デフォルトの名無しさん
2011/02/05(土) 03:25:28作ることは可能ですか?
0206デフォルトの名無しさん
2011/02/05(土) 03:47:43標準Cライブラリだけで作られているオセロゲームは存在しているよ
0207デフォルトの名無しさん
2011/02/05(土) 03:55:24ありがとう、OSの方がとっつきやすいですか。
ドライバ作れるようになった方が便利そうだけど、OS自作のほうが響き的にかっこいいし
OS自作の本買ってやってみる。さっそくポチった
0208デフォルトの名無しさん
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. その他
また、理由も添えていただけると助かります。
0209デフォルトの名無しさん
2011/02/05(土) 08:53:07渡すのが整数型なら、1でいいよ。5でもいいけど、インライン展開されない場合は寧ろコストが掛かる。
クラスか何かを渡すなら、逆ね。
0210デフォルトの名無しさん
2011/02/05(土) 15:32:06csvファイルを読み込んで表示しようとしても文字化けしてしまいます。
表示のところに何か問題がありますか?ご指摘ください!
#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);
}
0211デフォルトの名無しさん
2011/02/05(土) 15:38:51csvの文字形式をシフトJISにでも変換したらどうだろう
0212デフォルトの名無しさん
2011/02/05(土) 15:40:460213デフォルトの名無しさん
2011/02/05(土) 17:38:09WinMain()とmain()は
名前と引数以外には違いがないと考えていいのでしょうか。
0214デフォルトの名無しさん
2011/02/05(土) 18:18:570215デフォルトの名無しさん
2011/02/05(土) 18:37:08構造体を作ってそこに格納することも可能ですか?
0216213
2011/02/05(土) 18:38:09回答ありがとうございます。
たいへん恐縮ですが重ねて質問させてください。
試した限りはWinMainをmainに書き換えても同じように動作するのですが、
同じように動作しているように見えても実は違いがあるということでしょうか。
その場合、その違いがプログラムに深刻な影響を及ぼすケースはあるのでしょうか。
0217デフォルトの名無しさん
2011/02/05(土) 21:58:20標準ライブラリだけしか使わないなら大差ないよ。
GUIを含めて色々やろうと思い出すと、問題になるけど。
0218デフォルトの名無しさん
2011/02/05(土) 22:00:37なんで>210がダメでfscanf()で巧くいったのか小一時間問い詰めたいけどまぁいいや。
勿論、fscanf()で構造体に直接格納することも可能。但し、%sを使う場合は%20sのように制限することを考えた方がいい。
更に言えば、どうせ色々考えるならfgets()で取り込んだものをsscanf()でばらす方がいいかもしれない。
つーか、割と普通にそうする。
0219デフォルトの名無しさん
2011/02/05(土) 23:45:01int NUMと int hoge[NUM]という配列を定義したいのですが、単純にやるとできません。
なにかやる方法はありますか?
0220デフォルトの名無しさん
2011/02/05(土) 23:54:25class Victory {
static int const NUM = 10;
int hoge[ NUM ];
};
class Win {
enum{ NUM = 10 };
int hoge[ NUM ];
};
で可能。NUMの値をコンストラクタで取得したいとか言うのなら無理
0221デフォルトの名無しさん
2011/02/06(日) 00:00:49ポインタのみ定義して、コンストラクタで動的確保するしかないですかね?
0222デフォルトの名無しさん
2011/02/06(日) 00:02:130223デフォルトの名無しさん
2011/02/06(日) 00:02:490224デフォルトの名無しさん
2011/02/06(日) 00:04:19無理。動的確保しかない。
っていうか、>>222のいうとおり、vectorで。超便利。かなり早い。
一部の型については特殊化もされているので激速。
0225デフォルトの名無しさん
2011/02/06(日) 00:41:38普通の配列のように先頭要素へのポインタを得て、それを介して扱うことが不可能になるのだから。
0226デフォルトの名無しさん
2011/02/06(日) 01:45:390227デフォルトの名無しさん
2011/02/06(日) 07:18:350228デフォルトの名無しさん
2011/02/06(日) 18:00:30あれってboolさんだけじゃなかったのか
0229デフォルトの名無しさん
2011/02/06(日) 19:59:03なんでわざわざそうしたのですか?
seekっていう関数ひとつだけ用意した方が分かりやすい気がしますが。
0230デフォルトの名無しさん
2011/02/06(日) 20:10:100231デフォルトの名無しさん
2011/02/06(日) 20:50:03もう少し勉強してみます。
0232デフォルトの名無しさん
2011/02/06(日) 21:37:36入力ストリームと出力ストリームの位置が混在したら困るやん
0233デフォルトの名無しさん
2011/02/07(月) 17:11:59Cで構造体変数を初期化する際によくmemsetで全てのメンバ変数をまとめてゼロクリアしていたのですが
C++でクラスを利用する場合はコンストラクタでメンバ変数一つ一つに初期値を代入する以外に、よく使われる便利な方法というものは無いものでしょうか?
メンバ変数が多いクラスを初期化する際にコンストラクタが長ったらしくなったり、
メンバ追加の度にコンストラクタにも初期化処理を追加しなければないのに慣れず
初期化し忘れたりしないか、とか考えると何か他に便利な方法とか用意されてないのかな?と気になりまして質問させていただきました。
0234デフォルトの名無しさん
2011/02/07(月) 17:41:44そういう意味か
例えばifstreamではseekpとseekgは事実上同じ意味
しかしstringstreamは実際プログラムを書いてみればわかるが、seekpとseekgは
それぞれ違うポインタを指している
継承上の問題だと思うよ
0235デフォルトの名無しさん
2011/02/07(月) 19:39:09外部で構造体を初期化するのと、クラスのコンストラクタで自分自身を
初期化するのでは意味が違うような気もするけれど、コンストラクタでなにもしないで、
C風の使い方をすることは出来ます。
コンストラクタ内での定義については、まじめに定義して下さい。
なお、new されたオブジェクトだけなら、operator new を
override してクリアするという手段は(一般的とは言えませんが)あります。
0236229
2011/02/07(月) 23:36:13ありがとうございます。
seekpとseekgはfstreamだけのものでなくて、
同じくiostreamを継承しているstringstreamなどでも定義されている、
ということを知らなかったのが混乱の原因だったようですね。
基本的には入力ストリームの出力ストリームの位置は異なるけど、
fstreamの場合はそれらはファイルポインタを表しており、
ファイルポインタは1つしかないので、
たまたま常に同じ場所を指すことになっている、
ということでしょうか。
0237デフォルトの名無しさん
2011/02/08(火) 00:31:57ifstream、istringstreamにはseekpはない
ofstream、ostringstreamにはseekgはない
fstreamにはseekp、seekgの両方があるので混乱してるのでしょう
ご存じの通りファイルポインタは1つしかないのでseekpもseekgも同じ意味になります
ところがstringstreamは読み込みと書き込みを別々に行っているため、seekpとseekgは
使い分けなければなりません
0238デフォルトの名無しさん
2011/02/08(火) 00:41:09csvファイルをコマンドラインから読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。
読み込む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
0239229
2011/02/08(火) 02:35:44ご丁寧にありがとうございます。
疑問が解消しました。
質問に答えてくださった他の皆様も本当にありがとうございました。
とても勉強になりました。
0240デフォルトの名無しさん
2011/02/08(火) 03:57:54先ずは警告が出ている113行から直そうか。
0241デフォルトの名無しさん
2011/02/08(火) 04:04:3525行目 return 0; 追加
27行目 for(〜) ; このセミコロン不要
113行目 C==EOF
For(〜){ } の位置関係訂正
http://ideone.com/dP2EE
一応訂正しておいた。見てくれ。
0242デフォルトの名無しさん
2011/02/08(火) 19:43:08丁寧にありがとうございます!おかげさまでうまくいきました!
0243デフォルトの名無しさん
2011/02/08(火) 21:08:19int main()
{
return 0;
}
このaは
スタック領域ですか?
静的領域ですか?
コンパイラ依存ですか?
0244デフォルトの名無しさん
2011/02/08(火) 23:30:330245デフォルトの名無しさん
2011/02/09(水) 00:26:21mainが実行される前に確保される領域。
たとえば、
struct SomeClass
{
SomeClass()//コンストラクタ
{
>>breadpointB
}
}
SomeClass a;
int main()
{
>>breakpointA.
}
としてデバッグ起動すると、SomeClassのコンストラクタ
がmainよりも前に実行されることが確認できる。
0247デフォルトの名無しさん
2011/02/09(水) 01:13:51訂正します。
0249デフォルトの名無しさん
2011/02/09(水) 03:31:55メモリ領域としてのスタックとヒープ
データ構造としてのスタックとヒープ
前者のスタックは後者の構造をしているけど
ヒープは前者と後者で全く異なる概念だし
0250デフォルトの名無しさん
2011/02/09(水) 04:41:49else if(){処理2}
else{処理3}
のようにした時、処理1と処理2がそれぞれ終わった後、処理3に飛んでほしい場合は
どうすればよいのでしょうか?
0251デフォルトの名無しさん
2011/02/09(水) 04:43:380252デフォルトの名無しさん
2011/02/09(水) 04:58:20if(){処理1}
else if(){処理2}
else break;
処理3
break;
}
こっちでない
0253デフォルトの名無しさん
2011/02/09(水) 08:35:14どうなって欲しいのか条件を真理値表に纏めろ。先ずはそれからだ。
例えば、>250のコードだとこうなる。
文面に従えば、処理3は処理3'のようになって欲しいのか? それなら>251だが。
条件1 条件2 処理1 処理2 処理3 処理3'
真 真 ○ × × ○
真 偽 ○ × × ○
偽 真 × ○ × ○
偽 偽 × × ○ ○
0254デフォルトの名無しさん
2011/02/09(水) 08:39:55条件1 条件2 処理1 処理2 処理3
真 真 ○ × ○
真 偽 ○ × ○
偽 真 × ○ ○
偽 偽 × × ×
これだったら意味不明な無限ループなんて書かずに
if (条件1 || 条件2) {
if (条件1) 処理1;
else 処理2;
処理3;
}
でいいじゃん。
0255デフォルトの名無しさん
2011/02/09(水) 08:47:49else if(){処理2処理3}
0256デフォルトの名無しさん
2011/02/09(水) 08:51:190257デフォルトの名無しさん
2011/02/09(水) 09:05:240258デフォルトの名無しさん
2011/02/09(水) 11:25:10案外>>255みたいに同じコード(ここでは処理3)を2度書くケースって多いんだよね^^
0259デフォルトの名無しさん
2011/02/09(水) 11:28:080260デフォルトの名無しさん
2011/02/09(水) 14:49:11それ条件1が2回評価されるで
0261デフォルトの名無しさん
2011/02/09(水) 15:06:330262デフォルトの名無しさん
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としてこれでいいのか?
0263デフォルトの名無しさん
2011/02/09(水) 16:17:06STLで似通ったアルゴリズムのインタフェースを参照してみるとよいでしょう。
たとえばtransformは二つの範囲から一つの範囲へ出力する機能を提供します。
0264デフォルトの名無しさん
2011/02/09(水) 16:51:270265デフォルトの名無しさん
2011/02/11(金) 00:27:100266デフォルトの名無しさん
2011/02/11(金) 00:31:360267デフォルトの名無しさん
2011/02/11(金) 05:00:59else if(条件2) 処理2
else goto Label;
処理3
Label:;
でいいのにgoto絶対禁止教って大変だな
0268デフォルトの名無しさん
2011/02/11(金) 11:08:440269デフォルトの名無しさん
2011/02/11(金) 11:22:33if(条件1) 処理1;
else if(条件2) 処理2;
else break;
処理3;
} while(0);
0270デフォルトの名無しさん
2011/02/11(金) 18:34:43小さいプログラムしか組まない素人にはgotoは便利だな。
まあ、がんばれw
0271デフォルトの名無しさん
2011/02/11(金) 18:49:560272デフォルトの名無しさん
2011/02/12(土) 00:12:470273デフォルトの名無しさん
2011/02/12(土) 08:58:41構造化例外が無い時代には、エラー処理をgotoで書くと便利だったのは認めるけどな。
0274デフォルトの名無しさん
2011/02/12(土) 11:58:40例外関係なく、遙か昔にしかgoto使ったことないわ
0275デフォルトの名無しさん
2011/02/12(土) 14:12:450276デフォルトの名無しさん
2011/02/14(月) 10:57:38これをコンパイルしてみた。
--
http://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.
$
--
つまり、事実上全く一緒。
0277デフォルトの名無しさん
2011/02/15(火) 06:24:210278デフォルトの名無しさん
2011/02/15(火) 07:22:520279デフォルトの名無しさん
2011/02/15(火) 20:38:36C++でプログラム(主にゲームになるんじゃないか)組むには何をしたらいい?
参考文献を買う?サイト巡って「入門編」みたいのやっていく?
お前ら一番初め何やった
0280デフォルトの名無しさん
2011/02/15(火) 22:58:52昔みたいにアセンブラじゃなきゃ処理速度おっつかないみたいな世界じゃなくなったし。
0281デフォルトの名無しさん
2011/02/16(水) 14:02:17プログラミングの基礎は置いといて
ゲームを作るとなると主に画像の表示と音楽の再生が辛いところなんだが、
Dxlibっていうライブラリがあるからそれを使うのがとても楽な道。
Dxlibは使用者も多く、作者もかなり活動的だからサンプルもかなり多いし、初心者向けの質問掲示板もあったりする。
主に2Dゲーム用だが3Dも普通にいける。
ただ完全に3D用ならもっといいライブラリがあると思うけども。
0282デフォルトの名無しさん
2011/02/16(水) 16:45:160283デフォルトの名無しさん
2011/02/16(水) 20:08:35struct 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;
}
変数は上手くいくんですけど文字列が入力できなくて失敗してしまいます
結果 文字列--文字列は
どうか教えてください。
0284デフォルトの名無しさん
2011/02/16(水) 20:16:430285デフォルトの名無しさん
2011/02/16(水) 20:33:020286デフォルトの名無しさん
2011/02/16(水) 20:52:52かな。
0287デフォルトの名無しさん
2011/02/16(水) 21:04:020288デフォルトの名無しさん
2011/02/16(水) 21:10:13struct 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への命令と混じってしまったんでしょうか?(イメージですけど)
正直どこがどう間違ってるのかよくわからないんですけど教えて頂けないでしょうか?
0289デフォルトの名無しさん
2011/02/16(水) 21:24:15その後に文字や文字列を読み込むと、その改行文字を読み込む
0290デフォルトの名無しさん
2011/02/16(水) 21:38:44お前にはわからないからそう言ったのだろうが、scanfを見ればだいたいわかる。
他の部分に問題が無い事までは目を通さなかったので、「かな」をつけた。
まあ、精進したまえ。
0291デフォルトの名無しさん
2011/02/16(水) 21:45:38ありがとうございます、関数の仕組みを理解してませんでした…
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は自分じゃないです
0292デフォルトの名無しさん
2011/02/16(水) 21:59:24>scanf("%d\n",&p->menba1);
これだと>>283が望むような実行結果にならないって言ってんだよ、バカがw
0293デフォルトの名無しさん
2011/02/16(水) 22:37:490294デフォルトの名無しさん
2011/02/16(水) 22:47:40変数-- と表示される
数字入力してエンターを押す→何も表示されない
もう一度エンターを押してみる→何も表示されない
何度エンターを押しても何も表示されないので仕方ないから文字列を入力してエンターを押す
→変数の値は〜
文字列--文字列は〜
と表示される
0295デフォルトの名無しさん
2011/02/16(水) 23:00:34なるよ。バカ。
0296283
2011/02/16(水) 23:16:48バッファについて参考書読み直してるとこですが
283で何も文字を入力してないのに実行されたのはscanfで数字入力した後に押したエンターで
改行文字(NL)を取り込んだということですね
>>289さんが既にいってますけど
0297デフォルトの名無しさん
2011/02/17(木) 04:31:27どういった方法、ツールがあるのでしょうか?
また、実際に試された方っていらっしゃいますか?
あと、GCCでは完全なAST情報を
取得できないようになっているそうなのですが、
本当でしょうか?また、どの程度の情報までなら得られるのでしょうか?
ここ数年気になっていた内容です、よろしくおねがいします。
0298デフォルトの名無しさん
2011/02/17(木) 04:51:450299デフォルトの名無しさん
2011/02/17(木) 10:34:57肝臓が悪いんじゃないかと思うので検査してあげたいのです。
ってちがいます。↓こっちです。
http://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E6%A7%8B%E6%96%87%E6%9C%A8
よろしくおねがいします。
0300デフォルトの名無しさん
2011/02/17(木) 12:56:11Javaを覚えればTomcatでjsp出来ますし・・C#ならasp.netでMVCでWEBサイト構築できますし
0301デフォルトの名無しさん
2011/02/17(木) 13:54:22WebアプリをCやC++で書くことは多分ない。非効率だから。
0302デフォルトの名無しさん
2011/02/17(木) 17:30:50サーバー側のコードはC++で書いたことがあるが、確かにあまりないかもね。
0303デフォルトの名無しさん
2011/02/18(金) 04:02:150304デフォルトの名無しさん
2011/02/18(金) 15:29:120305デフォルトの名無しさん
2011/02/18(金) 16:38:26delete me;
0306デフォルトの名無しさん
2011/02/18(金) 17:58:56goto hotel;
0307デフォルトの名無しさん
2011/02/18(金) 21:20:41if ( you->age < 18 )
{
police.arrest(me);
return -1;
}
0308デフォルトの名無しさん
2011/02/18(金) 22:18:22{
public:
void arrest(Porson& P)
{
P.parent.call();
}
}
0309デフォルトの名無しさん
2011/02/19(土) 00:06:240310デフォルトの名無しさん
2011/02/19(土) 02:43:072chの鯖の負荷が大きくなったとき、一部をCに変えたはず。
そんな訳で、負荷が大きいサーバのクリティカルな部分の移植とかならありえるかも…
まぁ、めったに無いと思うけどね。
0311デフォルトの名無しさん
2011/02/26(土) 15:51:03.14クラスAにメンバ変数xを1つだけ追加したクラスBも同じfunc関数で扱わせたい場合、
普通にBがAを継承しても、当たり前かもしれませんがfuncはxを処理してくれません。
B用のfuncを別に用意せず、funcの少しの改変で(テンプレート等で)xを処理するように解決する方法がありますか?
0312デフォルトの名無しさん
2011/02/26(土) 15:59:33.89じゃダメなの?
0313デフォルトの名無しさん
2011/02/26(土) 16:09:41.52クラスAとクラスBはそれぞれfunc関数を
メンバに持つべきようなきもするけど。
そうしておかないと
処理対象が増殖していったとき
すぐにハッテン^h^h^h^hハタンする。
0314311
2011/02/26(土) 17:46:50.70それだとxが無いよとコンパイラに叱られます。
>>313
funcが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況があります。
できる人が見たら設計が悪いと指摘されるかもしれませんが・・・
設計を見直さず、デザパタ等でさくっとその場しのぎができないかと思いまして。
0315デフォルトの名無しさん
2011/02/26(土) 17:52:21.15どんなことしたいのか知らんけどこれが分かりやすいと思う。
0316311
2011/02/26(土) 17:56:47.98public:
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
テンプレートメソッドですか。調べてみます。ありがとうございます。
0317デフォルトの名無しさん
2011/02/26(土) 18:06:30.63virtual付けてないからどちらもAのfuncが呼ばれるぞ
0318311
2011/02/26(土) 18:12:43.52ぎゃっほんとだ・・・とんでもないミスを。
あとこの方法だとクラスAにも無駄なメンバを追加する必要がありますね。
わざわざ仮想関数持つのも微妙な感じですね。(速度的には問題ない?)
0319デフォルトの名無しさん
2011/02/26(土) 18:20:21.70同じ処理なんだからx弄る必要なんてないだろ
0320311
2011/02/26(土) 18:33:33.67説明不足ですみません。原則はAとBで同じ処理、Bの時はx弄る処理を途中に追加、をfuncで実現したいです。
どちみち仮想関数持つことになるなら、グローバルな関数funcをやめてテンプレートメソッドでやってみたいと思います。
0321デフォルトの名無しさん
2011/02/26(土) 21:45:11.630322デフォルトの名無しさん
2011/02/27(日) 12:59:01.64if文を重ねるのは御法度だろ
仮想関数で出来る物はするべき
0323デフォルトの名無しさん
2011/02/27(日) 20:24:40.560324デフォルトの名無しさん
2011/02/28(月) 13:44:49.55これって普通ですか?
0325デフォルトの名無しさん
2011/02/28(月) 14:06:13.380326デフォルトの名無しさん
2011/02/28(月) 14:14:45.700327デフォルトの名無しさん
2011/02/28(月) 14:48:55.38たぶん、別々のオブジェクトファイルに同じ定義があるといけないんじゃないんですか?
0328デフォルトの名無しさん
2011/02/28(月) 15:36:05.83いつエラーが出るのか書け
コンパイルの時なのか、リンク時なのか
0329デフォルトの名無しさん
2011/02/28(月) 15:44:12.060330デフォルトの名無しさん
2011/03/03(木) 01:01:29.02GCC-XMLとか。あとclangにもそういう機能があるらしい。
すまん、どっちも自身が使ったことはない。
0331デフォルトの名無しさん
2011/03/03(木) 17:42:55.74{
int foo;
};
hoge h;
#define bar foo
h.bar = 100;
#undef bar
上のように一時的に別名でアクセスしたいんだけど
マクロは使いたくない、よけいなコストも掛けたくない場合になにか手はありますか?
0332デフォルトの名無しさん
2011/03/03(木) 17:58:14.38hoge h;
int &bar = h.foo;
bar = 100;
一時的でなくともよいなら
struct hoge
{
int foo;
int &bar = foo;
};
かな
0333デフォルトの名無しさん
2011/03/03(木) 18:45:28.51>331は「よけいなコスト」だと思いそう。
一時的でなくていいならunionでしょ。初期化なしで済む。
0334デフォルトの名無しさん
2011/03/04(金) 06:37:31.110335デフォルトの名無しさん
2011/03/04(金) 08:46:34.37参照なら最適化されるからね。
参照がポインターと同等なのは引き数の場合でしょ
0336デフォルトの名無しさん
2011/03/06(日) 00:01:41.77↑の文字列をdllに渡すと計算結果が返ってきて、もし文字列が式ではないならエラーが帰ってくるdllを作りたいのですが
秀丸のマクロで利用できるものをお願いします
0337デフォルトの名無しさん
2011/03/06(日) 00:03:38.98何をお願いするんだ?
0338デフォルトの名無しさん
2011/03/06(日) 00:14:27.600339デフォルトの名無しさん
2011/03/06(日) 00:15:25.460340デフォルトの名無しさん
2011/03/06(日) 01:56:28.740341デフォルトの名無しさん
2011/03/06(日) 02:02:33.14DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。
どなたかわかる方いませんか?
test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。
0342デフォルトの名無しさん
2011/03/06(日) 02:07:11.900343341
2011/03/06(日) 02:35:43.860344デフォルトの名無しさん
2011/03/06(日) 03:44:32.230345デフォルトの名無しさん
2011/03/06(日) 14:12:45.340346336
2011/03/06(日) 14:13:49.50助けてください神様
0347デフォルトの名無しさん
2011/03/06(日) 14:18:15.020348デフォルトの名無しさん
2011/03/06(日) 14:29:33.98ここは作ってクレという板じゃないんだよ。有償なら作ってもやるけど。
判ったら去れ。
0349336
2011/03/06(日) 14:36:02.78では優勝でお願いします!
何日で出来ますか?
0350デフォルトの名無しさん
2011/03/06(日) 14:42:19.660351336
2011/03/06(日) 16:11:23.630352デフォルトの名無しさん
2011/03/06(日) 17:52:59.71h = 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];
}
0353デフォルトの名無しさん
2011/03/06(日) 17:55:02.980354336
2011/03/06(日) 18:26:36.96なんかサンプルが載ってるって言われたんですけど
サンプルからdllの作り方もわからないです
伝説の神様おねがいします><
0355デフォルトの名無しさん
2011/03/06(日) 18:29:29.28こいつに解決して貰え
そうすれば、いろいろなことに決着がつく
http://hibari.2ch.net/test/read.cgi/tech/1295273862/
0356336
2011/03/06(日) 18:31:31.220357デフォルトの名無しさん
2011/03/06(日) 18:38:27.510358デフォルトの名無しさん
2011/03/06(日) 18:41:28.09くさかべさまの発言はどれ?
0359デフォルトの名無しさん
2011/03/06(日) 18:43:28.240360デフォルトの名無しさん
2011/03/06(日) 18:49:09.000361336
2011/03/06(日) 19:00:06.69Pythonでdll作れるのかと思ったけど無理だった
本当お願いしますよ神様
0362デフォルトの名無しさん
2011/03/06(日) 19:44:16.67ただし、式ではないものの定義はそっちもち。
0363デフォルトの名無しさん
2011/03/06(日) 19:52:41.27秀丸マクロで書けるんじゃないの。
0364デフォルトの名無しさん
2011/03/06(日) 19:57:57.26良く知らないものに関して、そのマクロで書けそうって、予言者でつか?
0365デフォルトの名無しさん
2011/03/06(日) 20:05:54.65「こういう方向性でも解決できるんじゃないの」みたいに
ヒントを出すと、いい加減なこというなみたいに噛み付いてくるやつって
いるけど、最初から他人にやらせるしか頭にないからそういう
反応になるんだろうな。
0366デフォルトの名無しさん
2011/03/06(日) 20:31:32.860367デフォルトの名無しさん
2011/03/06(日) 20:47:57.6315分で終わる作業で1ヶ月も掛かるとか初心者かよ
0368デフォルトの名無しさん
2011/03/06(日) 21:17:12.83じゃあ君がやってあげたまえ。
0369デフォルトの名無しさん
2011/03/06(日) 21:22:58.8320万はらってくれたら。
0370デフォルトの名無しさん
2011/03/06(日) 21:58:49.67とりあえず、吹っかけるのがこの業界のデフォルト。
0371デフォルトの名無しさん
2011/03/06(日) 22:47:02.71public:
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へ渡す方法を教えてください。
0372デフォルトの名無しさん
2011/03/06(日) 22:50:56.82でおk
0373デフォルトの名無しさん
2011/03/06(日) 23:11:44.94こういうことがしたいんです。
A func0( A a ){
A b;
b = x(a); // aをいろいろ加工してbへ
return b; }
void main() {
A a;
func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す
}
0374デフォルトの名無しさん
2011/03/06(日) 23:17:30.050375デフォルトの名無しさん
2011/03/06(日) 23:20:06.89A& func(A& a)で
0376デフォルトの名無しさん
2011/03/06(日) 23:34:24.98ありがとうございました。
0377デフォルトの名無しさん
2011/03/07(月) 00:46:19.180378デフォルトの名無しさん
2011/03/07(月) 00:59:16.78通信系のデータマッピングに重要。
その他、データマッピングにも重要。
SSEするときに重要。
スピード狂するときも重要。
0379デフォルトの名無しさん
2011/03/07(月) 01:09:45.950380デフォルトの名無しさん
2011/03/07(月) 01:17:57.54ありがとうございます
0381デフォルトの名無しさん
2011/03/07(月) 05:58:02.17ローマ字だけを大文字に変換したいのですが、
それに適したライブラリや処理法ってあるでしょうか
0382381
2011/03/07(月) 06:02:48.930383デフォルトの名無しさん
2011/03/07(月) 08:04:22.80気にする必要は無い。ライブラリ作成者は気にしなければいけない。
0384デフォルトの名無しさん
2011/03/08(火) 11:23:21.92常にfindよりlower_bound使う方がいい?
0385デフォルトの名無しさん
2011/03/08(火) 12:50:24.25findはその値をもつ要素を探す
lower_boundはその値以上の要素を探す
Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる
素直にfindを使うんだ
0386デフォルトの名無しさん
2011/03/08(火) 12:54:32.71物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ
0387デフォルトの名無しさん
2011/03/08(火) 13:41:13.440388デフォルトの名無しさん
2011/03/08(火) 14:00:32.04なるほど、値がない場合のことを考えてなかった
値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから
0389デフォルトの名無しさん
2011/03/08(火) 14:18:10.690390デフォルトの名無しさん
2011/03/09(水) 11:49:22.82分からない事をここで聞く事に方向転換しましたよ
0391デフォルトの名無しさん
2011/03/09(水) 13:44:03.420392デフォルトの名無しさん
2011/03/09(水) 14:04:16.47出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください
ノートブックなので容量ないのですよ
0393デフォルトの名無しさん
2011/03/09(水) 14:05:57.900394デフォルトの名無しさん
2011/03/09(水) 14:13:44.27Windows SDK のコンパイラを使うか
Borland C++ Compiler を使うか
MinGW の gcc を使うか
ってところ?
0395デフォルトの名無しさん
2011/03/09(水) 15:17:00.51その3つではどれが一番初心者に向いてますか?
0396デフォルトの名無しさん
2011/03/09(水) 15:20:57.020397デフォルトの名無しさん
2011/03/09(水) 19:07:46.21メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を
読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか?
単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。
0398デフォルトの名無しさん
2011/03/09(水) 19:13:53.310399デフォルトの名無しさん
2011/03/09(水) 19:18:48.35動的にコンパイルして、動的にリンクすればできるけど、
大変だと思うよ
0400デフォルトの名無しさん
2011/03/09(水) 19:22:02.850401デフォルトの名無しさん
2011/03/09(水) 19:35:34.280402397
2011/03/09(水) 21:02:49.41ありがとうございます。インタープリターパターンという物が有ったのですね。
インタプリタ言語を再現したかのような形式になるのですね。
ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。
0403デフォルトの名無しさん
2011/03/09(水) 21:13:52.610404デフォルトの名無しさん
2011/03/10(木) 01:17:39.06if((t%320)/80==3){〜〜}
と
if((t%320)/80==1){〜〜}
else if((t%320)/80==3){〜〜}
ではどっちが早いんですの? 極わずかな違いだろうけど。
((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、
elseでぶっ飛ぶこと自体めんどくさいのかなって。
0405デフォルトの名無しさん
2011/03/10(木) 01:20:57.020406デフォルトの名無しさん
2011/03/10(木) 01:23:04.580407デフォルトの名無しさん
2011/03/10(木) 04:19:17.77tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。
整数型ならコンパイラが何とかするだろうけど。
0408デフォルトの名無しさん
2011/03/10(木) 07:09:05.14C言語の数値配列はなぜscanfのときは&がいるのに
printfのときは&がいらないんですか?
0409デフォルトの名無しさん
2011/03/10(木) 07:26:25.93まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。
例)
int hoge[10];
hoge[0] これは、int型データー。
&hoge[0] これは、hoge[0]のアドレスを指す。
hoge これも、hoge[0]のアドレスを指す。
だから、 hoge と &hoge「0」 は同じものだ。
0410デフォルトの名無しさん
2011/03/10(木) 07:39:04.04○だから、 hoge と &hoge[0] は同じものだ。
0411デフォルトの名無しさん
2011/03/10(木) 07:40:39.16見当違いだ。
用意されている関数とは別に、自作関数fを考えたとき
引数xの値を書き換えるにはどうすれば出来るか考えろ。
0412デフォルトの名無しさん
2011/03/10(木) 07:43:04.24int f(int x) では値の更新できないだろ。
だからアドレス渡しのint f(int *x)にする必要がある。
printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。
0413デフォルトの名無しさん
2011/03/10(木) 07:58:49.67そもそも数値配列だったか
0414デフォルトの名無しさん
2011/03/10(木) 10:14:09.75速度はどっちが速いですか?
0415デフォルトの名無しさん
2011/03/10(木) 10:32:58.60C
0416デフォルトの名無しさん
2011/03/10(木) 11:21:55.29ShowDialog()ではフォームが開くのですが、
Show()に変えると開かなくなってしまいました。
エラーにもならないので原因がわからずこまっています。
0417デフォルトの名無しさん
2011/03/10(木) 13:01:29.83Showもないことを聞くな
0418デフォルトの名無しさん
2011/03/10(木) 19:49:47.68CもC++もこれから学ぶのなら絶対C++。
C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。
0419デフォルトの名無しさん
2011/03/10(木) 21:33:53.230420デフォルトの名無しさん
2011/03/10(木) 21:35:10.160421デフォルトの名無しさん
2011/03/10(木) 21:37:00.000422デフォルトの名無しさん
2011/03/10(木) 23:20:01.18C++ や C をキチンと使いこなせてるのかな?
0423デフォルトの名無しさん
2011/03/10(木) 23:54:34.290424デフォルトの名無しさん
2011/03/11(金) 00:01:58.320425デフォルトの名無しさん
2011/03/11(金) 00:14:01.88それは better C が便利だから言われてるのではなく、
C++ プログラマが自由に C++ を使いたくて、C の制限を
排除する為の方便として言われてるだけ。
実際は C プログラマにとってデメリットはあれど、大した
メリットはない。
0426デフォルトの名無しさん
2011/03/11(金) 00:33:46.14初学者必読の書、Effective C++を読むだけでも、
Better Cなどという使い方はありえないと教わる。
実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。
CにはCの、C++にはC++の利点があり、
双方の利点は競合している。
0427デフォルトの名無しさん
2011/03/11(金) 01:12:03.09関数ローカルで可変長のバッファがほしいなーとか思ったときに
vectorでササッとやっつけしちゃったり
その程度でも十分役に立つし
0428デフォルトの名無しさん
2011/03/11(金) 01:19:51.86もちろん malloc/free でも良いよ
0429デフォルトの名無しさん
2011/03/11(金) 01:27:43.01なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん
0430デフォルトの名無しさん
2011/03/11(金) 01:31:14.68で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?
0431デフォルトの名無しさん
2011/03/11(金) 01:37:21.500432デフォルトの名無しさん
2011/03/11(金) 01:40:03.00それはどんな時?
0433デフォルトの名無しさん
2011/03/11(金) 01:42:08.480434デフォルトの名無しさん
2011/03/11(金) 01:58:46.11つ 無理筋
もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い
0435デフォルトの名無しさん
2011/03/11(金) 02:03:30.81「Better C として使うと便利だよ〜」
本音:
「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」
0436デフォルトの名無しさん
2011/03/11(金) 02:10:27.580437デフォルトの名無しさん
2011/03/11(金) 02:12:23.020438デフォルトの名無しさん
2011/03/11(金) 02:21:28.78C99で可変長配列が採用されたから今後も予定はないって聞いてたけど
0439デフォルトの名無しさん
2011/03/11(金) 02:31:30.81入ってない。可変長配列でオケ。
0440デフォルトの名無しさん
2011/03/11(金) 02:35:59.83リーナストーバルズちゃんもそう言ってたな。
実際、Cの流儀で書かれたC++コードほど迷惑なものはない。
0441デフォルトの名無しさん
2011/03/11(金) 02:41:28.450442408
2011/03/11(金) 03:52:59.23たとえば
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]なのはわかりますが、なぜほかの要素に&をつけていないのに
データが参照されているかということがわからないのです。
0443デフォルトの名無しさん
2011/03/11(金) 04:01:33.33単にこれだけの違い。
void f( int ); と void f( int * ); の違いみたいなもんですね。
パラメータ型が違うんだから、与える引数の型も変わって当然。
0444デフォルトの名無しさん
2011/03/11(金) 06:56:05.10俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが
俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利
合わない人と組んでやるときは、誰の特にもならない
0445デフォルトの名無しさん
2011/03/11(金) 07:55:56.16それでも流石にDoxygenコメント位入れるけど。
0446デフォルトの名無しさん
2011/03/11(金) 08:30:07.62ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。
IDE必須になるのが嫌だな。
0447デフォルトの名無しさん
2011/03/11(金) 08:42:24.51クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・
元々がC with Classな訳だし
0448デフォルトの名無しさん
2011/03/11(金) 08:58:28.54そう?
俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは
ちょっと便利な構造体だけどな?
継承とか演算子のオーバーロードがあるとC++って感じになる
と言いつつ、クラスの性質に合わせて両方とも使ってるけどね
0449デフォルトの名無しさん
2011/03/11(金) 10:15:11.380450デフォルトの名無しさん
2011/03/11(金) 10:32:20.700451デフォルトの名無しさん
2011/03/11(金) 10:55:27.620452デフォルトの名無しさん
2011/03/11(金) 10:56:10.210453デフォルトの名無しさん
2011/03/11(金) 11:02:28.87http://www.embarcadero.com/jp/downloads
0454デフォルトの名無しさん
2011/03/11(金) 11:27:06.710455デフォルトの名無しさん
2011/03/11(金) 11:31:37.360456デフォルトの名無しさん
2011/03/11(金) 12:35:41.620457デフォルトの名無しさん
2011/03/11(金) 12:40:32.020458デフォルトの名無しさん
2011/03/11(金) 13:04:40.160459デフォルトの名無しさん
2011/03/11(金) 13:40:46.46めり込んだ杭をどうしろと
0460デフォルトの名無しさん
2011/03/11(金) 23:16:01.68町田市ようやく電気回復したよ。
9時間C++で遊べず^^;
0461デフォルトの名無しさん
2011/03/11(金) 23:43:36.660462デフォルトの名無しさん
2011/03/12(土) 00:20:57.01俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる
お前らも折り畳み自転車くらい持っとけば?
0463デフォルトの名無しさん
2011/03/12(土) 00:45:03.54もちろん STL も使うでしょ?
そこから分かる事は、ベターCというのは人に依って範囲が全然違うから
具体的な実態を持たない、気をつけるべき用語だと言う事だね。
0464デフォルトの名無しさん
2011/03/12(土) 05:09:26.98道路はどこも渋滞と帰宅難民で大混雑だそうだから気をつけなよ
0465デフォルトの名無しさん
2011/03/12(土) 13:39:27.780466デフォルトの名無しさん
2011/03/12(土) 14:21:20.690467デフォルトの名無しさん
2011/03/15(火) 21:59:40.13ttp://n.xxad.net/watch/sm13809685
【どうすればこの欲望の渦巻く堕落した世界に私の名を残せるだろうか】
※名を残したいとは思わないがw。
【狂乱のマシンを残せばいい】
【この狂乱の世界に相応しい野獣のようなマシンを】
【狼が来たからやってきた】
【お前の平和な街は今はもう安全ではない】
0468デフォルトの名無しさん
2011/03/16(水) 08:25:09.18マルチタスク、プロセスなど色々有る様なのですが、何を学ぶのが適切でしょうか?
また、学習にオススメのサイト、学習用サンプルの有るサイトなども有れば、教えて頂けますと幸いです。よろしくお願いします。
0469デフォルトの名無しさん
2011/03/16(水) 20:54:30.09スレッド。
0471デフォルトの名無しさん
2011/03/22(火) 00:22:33.52分割ファイル読みの方が楽だと思うけど。
0472デフォルトの名無しさん
2011/04/05(火) 02:49:28.72char const*
の違いを教えてください
0473デフォルトの名無しさん
2011/04/05(火) 03:14:41.32同じ
0474デフォルトの名無しさん
2011/04/05(火) 03:43:50.45ありがとうございます!!!
0475デフォルトの名無しさん
2011/04/05(火) 19:53:08.284/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
今後 http://atmc.jp/ を注目せよ。
0476デフォルトの名無しさん
2011/05/03(火) 22:35:12.600477チョクト
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;
}
}
}
0478デフォルトの名無しさん
2011/05/04(水) 16:45:02.58main()
{
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;が指摘されてるんですが、理由が分かりません
0479デフォルトの名無しさん
2011/05/04(水) 16:47:01.47http://codepad.org/dMf4ePXj
コンパイルと実行できたよ。
0480デフォルトの名無しさん
2011/05/04(水) 16:48:45.45main関数に型がついてないだけだよ!
codepadは無くても良いのね
0481デフォルトの名無しさん
2011/05/04(水) 16:51:19.60int mainで出来ました
だけど、今までこれ以外の他のコードではint mainとかかなくてもコンパイル出来てたんですが
なぜこのソースに限ってはint mainとしなきゃダメだったんでしょうか?
0482デフォルトの名無しさん
2011/05/04(水) 16:53:44.72コンパイルする環境が変わったとしか思えない
0483デフォルトの名無しさん
2011/05/04(水) 16:57:04.480484デフォルトの名無しさん
2011/05/04(水) 16:59:09.670485デフォルトの名無しさん
2011/05/04(水) 17:05:37.07拡張子を .cpp にすると C++ になって int を省略できないとか
そういうことじゃないのかい
0486デフォルトの名無しさん
2011/05/04(水) 17:07:34.240487デフォルトの名無しさん
2011/05/04(水) 17:14:19.53それはないです
ずっとソースを使いまわしながら関数だけ変更してたので
たまたま今回はint mainにしなければなぜかコンパイル出来ない状態になったので
ビックリしております
環境が変わったにしてもその理由もサッパリです
ただ、大した問題じゃなさそうだし解決したのでよしとします
0488デフォルトの名無しさん
2011/05/04(水) 17:32:10.220489デフォルトの名無しさん
2011/05/04(水) 18:04:55.470490デフォルトの名無しさん
2011/05/04(水) 18:25:08.910491デフォルトの名無しさん
2011/05/04(水) 18:33:24.25使う必要はありません
0492デフォルトの名無しさん
2011/05/04(水) 18:34:24.93置換用のマクロだよ
0493デフォルトの名無しさん
2011/05/04(水) 22:36:46.640494デフォルトの名無しさん
2011/05/04(水) 23:02:42.870495デフォルトの名無しさん
2011/05/05(木) 00:10:15.050496デフォルトの名無しさん
2011/05/05(木) 00:25:49.87初期化子の話なら決まってるよ
0497デフォルトの名無しさん
2011/05/05(木) 23:45:19.26他の言語はC言語をさわりだけやった程度なので、他の言語をやった人向けのは難しいです
0498デフォルトの名無しさん
2011/05/06(金) 01:33:46.81なんかググったら同じ本二種類出てきてわからないが、理解できそうならそれでいいと思うよ
初心者用って書いてあるけど他の言語習得者向けな本があること知ってるなら他に注意すべきこともないだろう
C++はコンパイルは通るし動くけどやっちゃいけないことというのが多いので
むしろ基礎が終わったら、そのうちEffectiveC++とか読むのをおすすめする
ちょっと便利な機能の増えたCとして使う気ならべつにいいが
0499デフォルトの名無しさん
2011/05/06(金) 01:59:32.25まだ、perlの方がまし。
0500デフォルトの名無しさん
2011/05/06(金) 02:09:18.610501>>500です
2011/05/06(金) 02:39:24.23printf("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のところがイマイチ理解できません。
0502デフォルトの名無しさん
2011/05/06(金) 02:47:59.64default: がなんなのか分からない
breakの意味が分からないってことか?
0503デフォルトの名無しさん
2011/05/06(金) 02:52:22.64それは大丈夫です
0504デフォルトの名無しさん
2011/05/06(金) 07:22:37.680505デフォルトの名無しさん
2011/05/06(金) 14:12:10.900506デフォルトの名無しさん
2011/05/06(金) 14:23:43.80case 'x':
end = 1;
break;
breakがないとcaseはそのままスルーしてたとえXでもendのところにくる
だが一般にこれは行儀が悪く良くない書き方
0507デフォルトの名無しさん
2011/05/06(金) 14:36:31.730508デフォルトの名無しさん
2011/05/06(金) 15:04:36.37switch文の中なので直接飛べないのでendという変数をフラグにしてあるんだろ
swtichの次のところでendが1ならwhileループを抜けると書いてある
0509デフォルトの名無しさん
2011/05/06(金) 15:13:05.69VC++で、コンボボックスにデータバインドする方法を教えてください。
XSDファイルをバインドしたいのですが、データソースには「なし」としか書かれていなくて困っています
0510デフォルトの名無しさん
2011/05/06(金) 16:33:48.63配列の反復子を関数に渡してそれに入れてもらうと仮定した場合
配列の大きさが前もってわかってないので十分な大きさを確保する必要があると考えますが
これは不合理と理解しますのでソリューションをご教示ください。
0511デフォルトの名無しさん
2011/05/06(金) 17:45:59.692,char* = new char[n];
3,char* = (char)malloc(sizeof(char) * n);
好きなのを使えばいい。メモリは解放するんだぞ
0512デフォルトの名無しさん
2011/05/06(金) 17:49:37.15使い終わったら勝手に消えてくれるイテレーターがあると助かるんだけど。
0513デフォルトの名無しさん
2011/05/06(金) 17:55:19.630514デフォルトの名無しさん
2011/05/06(金) 18:00:28.200515デフォルトの名無しさん
2011/05/06(金) 18:13:32.59仕様的にこのようにlistの走査中に削除や追加をしていいのだろうか?
0516デフォルトの名無しさん
2011/05/06(金) 18:18:20.28一つ一つの手続きに問題が無いんだし
0517デフォルトの名無しさん
2011/05/06(金) 20:17:11.940518デフォルトの名無しさん
2011/05/07(土) 01:22:42.460519デフォルトの名無しさん
2011/05/07(土) 08:56:21.460520デフォルトの名無しさん
2011/05/07(土) 09:22:56.32一般的なlistの実装なら問題ないのかな
これがvectorだったら再確保された場合イテレーターが死ぬから無理だけど
仕様で許可されてるのかどうかまではわからないな
0521デフォルトの名無しさん
2011/05/07(土) 10:29:04.37listコンテナのmodifier (23.2.2.3)
insert,push_front,push_back はイテレータや参照の有効性に影響を及ぼさない。(p1)
erase,pop_font,pop_back,clear は削除される要素へのイテレータや参照だけ無効になる。(p3)
0522デフォルトの名無しさん
2011/05/07(土) 12:09:13.01void solve(vector <pair<string, int> >& h){}
この様な "ペアを内包したベクタへの参照を引数に取る関数" を定義したいです。でも出来ません。
「invalid initialization of non-const reference of type…」とコンパイラに怒られます。
現状は
void solve(const vector<pair<string, int> >* h){}
としています。お教え頂けませんか?
0523デフォルトの名無しさん
2011/05/07(土) 12:20:51.600524デフォルトの名無しさん
2011/05/07(土) 12:22:36.45const
0525デフォルトの名無しさん
2011/05/07(土) 12:53:18.250526デフォルトの名無しさん
2011/05/07(土) 13:16:57.37gcc4.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();
}
0527デフォルトの名無しさん
2011/05/07(土) 13:38:25.91memcpy_s でコピーして問題ありますか?
次のような構造体のときmemset()で0初期化すると
整数型0と挙動小数点0.0f, 0.0dの区別の関係で問題があると
きいて懸念ができたので聞いておきたいのです。
struct A
{
char c;
int i;
float f;
double d;
};
0528デフォルトの名無しさん
2011/05/07(土) 13:43:47.11struct A
{
double d;
float f;
int i;
char c;
};
0529デフォルトの名無しさん
2011/05/07(土) 13:52:47.050530デフォルトの名無しさん
2011/05/07(土) 14:14:08.99関数定義が構造体(貴殿のでいうVpsi)の参照渡しなのに、アドレス渡してcallしてました。
呼び出す方のミスでした。アホだった。ありがとうございました。
>>524
const は記載ミスでした。関係有りませんでした。すみません、ありがとうございます。
0531デフォルトの名無しさん
2011/05/07(土) 14:26:48.76注意する点は、
「C++の仕様内で整数型および浮動小数点数型の内部表現が定まってない事」
「バイト単位によるコピー、セットに伴うアラインメント」
「A自体がPODかどうか」
それぞれぐぐれば出てくる。
まぁ、AはPODだしアラインメントは::operator new使えば関係ないし
整数型の内部表現も二進数で1バイトのbit数も8だろうし
浮動小数点数規格IEEE 754, 854は全てのデータが0であると+0として認識されるから
その時点ではそれらの関数を使うことに対して全く問題はない。
0532デフォルトの名無しさん
2011/05/07(土) 16:31:42.78winapiスレがいいですよ
0533527
2011/05/07(土) 17:31:50.00でもアライメントはsizeofで構造体サイズを指定すればいんじゃない?
0534デフォルトの名無しさん
2011/05/07(土) 20:23:26.98構造体サイズをアライメントに採用すると間違いではないけど無駄が多くなる
0535デフォルトの名無しさん
2011/05/07(土) 22:31:08.501 現在において一度に取得可能な数
2 最も良い状況での取得可能な数
のどっちでしょうか?
0536デフォルトの名無しさん
2011/05/07(土) 22:46:21.51そんなCPUアーキテクチャは存在しない。バカな質問するな。
0537デフォルトの名無しさん
2011/05/07(土) 22:51:13.86仮定って言ってるだろ
空きメモリの限界に引っかかる場合を除いてって意味でしょうに
0538デフォルトの名無しさん
2011/05/07(土) 22:57:33.510539デフォルトの名無しさん
2011/05/08(日) 21:42:53.33論理的に確保可能な要素の数。
0540デフォルトの名無しさん
2011/05/09(月) 05:19:28.20Bの処理が終わったら主処理ループm回分待機してからCの処理
のような仕組みをカウンタの変数用意して回すのが嫌で嫌でなりません
どうにかしてC++でマイクロスレッドやコルーチンを用いる方法はないでしょうか
0541デフォルトの名無しさん
2011/05/09(月) 06:40:07.930542デフォルトの名無しさん
2011/05/09(月) 10:36:46.35欠陥を感じずにはいられない
なぜ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 ビットの整数です。
>詳細については、「時間管理」を参照してください。
と書いてあるぞ???
0543デフォルトの名無しさん
2011/05/09(月) 10:46:16.970544デフォルトの名無しさん
2011/05/09(月) 11:06:17.370545デフォルトの名無しさん
2011/05/09(月) 15:59:54.51ttp://codepad.org/xl8U0aul
こういうのは?いろいろパターンあると思うけど
0546デフォルトの名無しさん
2011/05/09(月) 16:00:30.77どうもすいません
aかAを入力すると「Aだった」出力されます
それ以外のキーを入力すると「まじめにやれ」と出力されます
つまりXかxを入力しない限り、このコマンドは終わらないということですが、
それは何がどう働いてるからこういう動きになるのでしょうか?
0547デフォルトの名無しさん
2011/05/09(月) 16:06:25.580548デフォルトの名無しさん
2011/05/09(月) 16:16:22.39whileが真の間だけ繰り返すというのは理解してるんですが、この場合、何か入力したら、
getcharがゲットし、それをcに代入するわけですよね?
ここでここでcが\nと等しくない(>>501の7行目)ってのが何を意味するのかイメージつかめません
また、24行目のif( end == 1)の1ってのがどういうアレなのかもイメージ尽きません
0549デフォルトの名無しさん
2011/05/09(月) 16:23:19.380550デフォルトの名無しさん
2011/05/09(月) 17:11:39.62端末に例えばAだけ入力したくても通常は1行入力モードだから改行文字が必要。
で、そいつを入力すると今度は判定の邪魔になるから改行文字は無視したい。
さて、どうする? と言うお話だったのさ。
0551デフォルトの名無しさん
2011/05/09(月) 17:16:12.62getchar() は、入力した文字を1文字ずつ返します。 改行も '\n' という文字になります。
例えばあなたは、まず a を押し、次にエンターを押し、さらに x を押し、次にまたエンターを押したとしますね?
そうすると、最初は getchar() が 'a' を返し、それが c に代入され、次の時 getchar() は '\n' を返し、それが c に代入され、さらにその次の時 getchar() は 'x' を返し、以下同様に動きます。
549氏の言われるようにそれで1行ずつプログラムの動きを追ってみてください。 人間コンピュータになったつもりで。
end の 1 は、ほら、case 'x': のところで代入してるじゃないですか。 end に 1 を代入したら end が 1 になり、 end == 1 が成立するようになります。
0552デフォルトの名無しさん
2011/05/09(月) 18:12:36.07しかし、
if(c != \n);
break;
がどうもダメです。
文字がエンターと等しくない事がどうしてwhileループを抜けるになるんでしょうか?
aを押したあと、エンター押しますよね普通。
xを押せば終了ですが、aだと終わることなくループしますし。
つまりwhileループは抜けないことになるかと思います。
0553デフォルトの名無しさん
2011/05/09(月) 18:19:30.30while(1) は2つあるだろ
printf から switch 文まで全体を囲ってる外側の while(1) と、getchar と if 文だけを囲ってる内側の while(1)
そこの break で抜けるのは内側の while(1) だよ
0554デフォルトの名無しさん
2011/05/09(月) 23:04:22.40iが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;
}
0555デフォルトの名無しさん
2011/05/09(月) 23:57:39.95i<=jのときだけそこのループ処理を行う
0556デフォルトの名無しさん
2011/05/10(火) 00:45:39.250557デフォルトの名無しさん
2011/05/10(火) 00:48:48.31ダブルスコアでC++
0558デフォルトの名無しさん
2011/05/10(火) 01:12:34.78もうちょい詳しくお願いします
iとjがインクリメントで1つづ増えてそれが9までいくってのはわかります
しかしi>jが何を意味すんのか、それによって何がどうなるかがイマイチ分かりません
0559デフォルトの名無しさん
2011/05/10(火) 01:15:09.64iがインクリメントされるタイミングわかる?
0560デフォルトの名無しさん
2011/05/10(火) 01:15:37.910561デフォルトの名無しさん
2011/05/10(火) 01:22:51.64iがjより大きいときですか?
0562デフォルトの名無しさん
2011/05/10(火) 01:25:29.36C の方が断然強いよ
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
0563デフォルトの名無しさん
2011/05/10(火) 01:31:20.922,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
・
・
・
略
0564デフォルトの名無しさん
2011/05/10(火) 01:38:49.07ちゃんと自動でインデントしてくれるエディタ使ってる?
そしてfor文について理解してる?
0565デフォルトの名無しさん
2011/05/10(火) 01:42:08.79forはほぼばっちりです。
0566デフォルトの名無しさん
2011/05/10(火) 01:44:58.93#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;
}
0567デフォルトの名無しさん
2011/05/10(火) 01:50:46.96http://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;
}
0569デフォルトの名無しさん
2011/05/10(火) 19:35:17.14かかるコストはコンパイル時にtypeid使ってるクラスの分だけ?
0570デフォルトの名無しさん
2011/05/11(水) 00:34:10.88リンカあたりが取り除いてくれる最適化があるのか?
もっとも今時のPCなら、全部作られたとしても、そう大したコストではないとは思うが。
0571デフォルトの名無しさん
2011/05/11(水) 02:57:06.850572デフォルトの名無しさん
2011/05/11(水) 12:38:25.510573デフォルトの名無しさん
2011/05/11(水) 12:46:13.890574デフォルトの名無しさん
2011/05/11(水) 12:49:00.96ごめんなさい
0575デフォルトの名無しさん
2011/05/11(水) 13:35:03.57あります。文字列リテラルを同じ空間に確保するかどうかは環境依存です。
0576デフォルトの名無しさん
2011/05/11(水) 15:14:46.740577デフォルトの名無しさん
2011/05/12(木) 17:25:51.36SuperClass* pSuper p = new SubClass();
SubClass pSub = (SubClass)p;
このようにダウンキャストするときにdynamic_castを使わず
C言語ライクにキャストするとキャストコストがない、で正しいでしょうか?
>>576
仮想関数があるとサイズに違いがでるよ。
0578デフォルトの名無しさん
2011/05/12(木) 17:45:47.09演算子オーバーロードは問題外として
仮想関数関係のアレはC形式のキャストでもちゃんとやるよ
0579469
2011/05/12(木) 19:45:23.61Cスタイルキャストはオススメしない。コードが不明瞭になる
絶対キャストが成功する保障があるなら
static_castを使いましょう
boost使えるならpolymorphic_downcastをオススメ
0580579
2011/05/12(木) 19:46:54.730581デフォルトの名無しさん
2011/05/12(木) 22:16:42.49static_castの方は実行時ではなくコンパイル時ですね。
ありがとうございます。
0582デフォルトの名無しさん
2011/05/13(金) 00:38:27.800583デフォルトの名無しさん
2011/05/13(金) 00:42:29.930584デフォルトの名無しさん
2011/05/13(金) 00:56:02.33手続き型の言語に手を出すといいよ
0585デフォルトの名無しさん
2011/05/13(金) 01:23:33.110586デフォルトの名無しさん
2011/05/13(金) 20:44:52.19<<
>>
ってかわいいよね
0587デフォルトの名無しさん
2011/05/13(金) 21:14:56.830588デフォルトの名無しさん
2011/05/14(土) 03:10:16.10仮想メンバ関数は呼んではいけなかったんでしたっけ?
基底クラスの非仮想メンバ関数は呼んでいいんでしたっけ?
教えてくださいお願いします
0589デフォルトの名無しさん
2011/05/14(土) 04:22:17.45オーバーライドされていても親クラスの関数が呼ばれる
0590デフォルトの名無しさん
2011/05/14(土) 14:40:10.68親がコンストラクトされる前に子のメンバ関数を呼び出せてしまうとやばい
子の準備前に呼ばれるわけだからね
0591デフォルトの名無しさん
2011/05/14(土) 14:55:30.91親のコンストラクタから子のメンバ関数って呼べるんですか?
親のコンストラクタからメンバ関数を呼ぶと普通に其のクラスのメンバ関数(さらに親はいないとして)が呼ばれるみたいなんですが
0592デフォルトの名無しさん
2011/05/14(土) 15:06:05.730593デフォルトの名無しさん
2011/05/14(土) 15:07:59.11ですよね
みなさん参考になりました
どうもありがとうございました
0594デフォルトの名無しさん
2011/05/14(土) 17:20:54.22無理やり呼ぶとこうなる
0595デフォルトの名無しさん
2011/05/15(日) 01:15:06.080596デフォルトの名無しさん
2011/05/15(日) 01:31:05.73ほんと今から触れる人はCすっとばしてC++触るべきだと思うわ
0597デフォルトの名無しさん
2011/05/15(日) 01:33:37.570598デフォルトの名無しさん
2011/05/15(日) 01:37:43.22環境構築が居るってのが抵抗ある
0599uy
2011/05/15(日) 02:36:23.56たいしたものは存在してない
lambda? スマートポインタ?
自分でかけよ
自分でその程度の機能すらかけないゴミカスが、ライブラリに頼る時に使う機構をBoostと呼ぶ
そしてC++で出来る事は実は、やろうとすりゃCでも出来るので、
現在のITの世界の互換性っていう観点からみると、
C++よりもCを極めたほうが、広い世界を見ることが出来る
Cにしろ、C++にしろ、いずれ、マシなコンパイラ言語が世の中に出てくるはずなので
そのときに、いずれ両方とも消え去る
Cは時代遅れ、C++は、時代遅れではないけれど記述が冗長すぎて、
この言語は、使っていけません、ただの芸術作品です
情報技術のお部屋に未来永劫飾っておく言語、C#、JAVAよりは偉いよC++。
Cの次くらいに、偉い
C++は初心者の学習用言語にむいてる
生半可な力で使っていける言語ではないという点が、学習用途にはとても良い材料ではある
その苦境を超えてこれるなら、よきプログラマになれるだろう
そのままC++を使い続けるプログラマになったとしても、
C++から別言語に移ったとしても、C++を( その気になれば )かける奴というのは
根が強い。
言語というそのものへの理解が、深いといえる
ゴミグラマは死ね
0600デフォルトの名無しさん
2011/05/15(日) 02:39:16.30死ねゴミ
0602uy
2011/05/15(日) 02:40:39.85ブラウザ5つもって全てのクッキーがレベル6以上なので、1個潰されたくらいなんともないので^^;;;;
0603デフォルトの名無しさん
2011/05/15(日) 02:52:16.47死ねゴミ
0604デフォルトの名無しさん
2011/05/15(日) 03:14:08.73プリミティブが多いゲームだとC#じゃ速さが足りない
0605デフォルトの名無しさん
2011/05/15(日) 04:11:10.080606デフォルトの名無しさん
2011/05/15(日) 04:13:24.290608デフォルトの名無しさん
2011/05/15(日) 08:44:14.07死ねゴミ
0609デフォルトの名無しさん
2011/05/15(日) 09:34:01.17それじゃGCネタとかメモリ管理ネタが誤爆で見えなくなりそうだし困ったものだ
0610デフォルトの名無しさん
2011/05/15(日) 10:35:04.63uyをNGネームに指定してあとは連鎖で
0611デフォルトの名無しさん
2011/05/16(月) 00:25:12.92おねがいします。こんな感じで書いてみたんですが、案の定ダメでして。
class hoge
{
char hogehoge;
public:
char getHogeHoge()
{
return hogehoge;
}
char setHogeHoge(char value)
{
hogehoge = value;
}
}
0612デフォルトの名無しさん
2011/05/16(月) 00:29:51.81class hoge
{
char hogehoge[256];
public:
char* getHogeHoge(char* value)
{
strcpy(value, hogehoge);
return value;
}
void setHogeHoge(const char* value)
{
strcpy(hogehoge, value);
}
}
0614デフォルトの名無しさん
2011/05/16(月) 11:25:07.85お前が死ね
0615デフォルトの名無しさん
2011/05/16(月) 12:28:17.12お前が死ね
0616デフォルトの名無しさん
2011/05/16(月) 12:39:18.70全員死ね
0617デフォルトの名無しさん
2011/05/16(月) 12:41:34.17お前が死ね
0618デフォルトの名無しさん
2011/05/16(月) 13:14:13.55お前が死ね
0619デフォルトの名無しさん
2011/05/16(月) 18:11:55.210620デフォルトの名無しさん
2011/05/16(月) 23:53:33.740621デフォルトの名無しさん
2011/05/16(月) 23:56:59.250622デフォルトの名無しさん
2011/05/16(月) 23:59:50.400623デフォルトの名無しさん
2011/05/18(水) 14:02:29.70__try{}文を見つけました、これをC++のtry{}catch()に変更したいのですが、特に問題ないでしょうか?
環境は、windowsのアプリです。
0624デフォルトの名無しさん
2011/05/18(水) 14:04:11.34だめだよwwwwwww
それはそれぞれ全然違うものだ
0625デフォルトの名無しさん
2011/05/18(水) 14:25:05.62try{
__try…
}
catch{
…
}
0626デフォルトの名無しさん
2011/05/18(水) 14:30:06.78てゆーか何で書き換えたいの?
0627デフォルトの名無しさん
2011/05/18(水) 20:09:40.63VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
http://www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm
を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。
0628デフォルトの名無しさん
2011/05/18(水) 20:20:26.640629デフォルトの名無しさん
2011/05/18(水) 20:43:02.190630デフォルトの名無しさん
2011/05/19(木) 20:00:37.390631デフォルトの名無しさん
2011/05/19(木) 20:45:37.910632デフォルトの名無しさん
2011/05/19(木) 21:17:28.94解決しました。
お騒がせしました。
0633デフォルトの名無しさん
2011/05/20(金) 17:32:09.730634デフォルトの名無しさん
2011/05/20(金) 17:36:35.19使えるライブラリが違います
C++ではboost使えますが、Cでは使えません。
0635デフォルトの名無しさん
2011/05/20(金) 17:54:11.54あっ。て事はCの後はC++でほぼ同じ内容を違う言葉で覚え直す感じでしょうか?
0636デフォルトの名無しさん
2011/05/20(金) 18:01:04.36ttp://ja.wikipedia.org/wiki/C%2B%2B
0637デフォルトの名無しさん
2011/05/20(金) 18:02:49.14wikiは参考にさせていただきます。
ありがとうございます。
0638デフォルトの名無しさん
2011/05/20(金) 18:06:44.37人に聞いてわかるほど単純じゃないな。
全部、一から勉強しよう。
0639デフォルトの名無しさん
2011/05/20(金) 19:09:24.150640デフォルトの名無しさん
2011/05/21(土) 01:54:51.530641デフォルトの名無しさん
2011/05/21(土) 02:53:46.740642デフォルトの名無しさん
2011/05/21(土) 11:04:41.030643デフォルトの名無しさん
2011/05/21(土) 23:29:00.28大量の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などを消してみたり色々試したのですが、
他のエラーを吐き始めるので先に進みません。
宜しくお願いします。
0644デフォルトの名無しさん
2011/05/22(日) 00:20:15.730645デフォルトの名無しさん
2011/05/22(日) 01:00:28.24暇なので試してみた
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プロジェクトに追加しコンパイル
この行は適当だから他のメイクファイルを参考に確認したほうがいいかも
0646デフォルトの名無しさん
2011/05/22(日) 01:39:12.772度ほど、慎重にやってみましたがエラーの内容は変わりません。
もしかすると、と思いfatal errorの内容で調べてみたら
プリコンパイル済みヘッダを使用しない、/Tcオプションを付ける、などで対処できるらしいと聞きました。
そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
プリコンパイル済みヘッダーの項目を使用しないに変更しました。
また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
コンパイル言語の選択をCコードとしてコンパイルを選択、
プロジェクトをクリーンしてビルドしました。
ビルドは通りました。.libも作成されています。ログを載せておきます。
http://www.dotup.org/uploda/www.dotup.org1657702.log.html
半分自己解決したようなものでお手を煩わせてすみません……。
ありがとうございました。
0647デフォルトの名無しさん
2011/05/22(日) 02:18:22.21> プリコンパイル済みヘッダーの項目を使用しないに変更しました。
"スタティックライブラリ"の場合はそうだね、すまん
> また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
> コンパイル言語の選択をCコードとしてコンパイルを選択、
拡張子が*.cならCコードとしてコンパイルされるのが
デフォルトの動作なので意味無いよ
0648デフォルトの名無しさん
2011/05/22(日) 03:51:49.25Aのoperator==は、フレンドで、グローバルに定義しないといけないの?
0649デフォルトの名無しさん
2011/05/22(日) 11:03:07.01せっかく実装を隠ぺいしたのに実装に依存して例外処理を書き換えないといけないなんて不愉快ですよね
0650デフォルトの名無しさん
2011/05/22(日) 12:15:32.990651デフォルトの名無しさん
2011/05/22(日) 15:08:08.45なぜ?
0652デフォルトの名無しさん
2011/05/22(日) 15:16:10.20例外処理を実装に依存して書き換えるって、意味がよくわからないんだが。
それは例外処理の中身によるだろうし、もしそこが実装依存にしか書けない
エラー処理なら、それは例外処理を利用しなくても実装依存にしか書けないんじゃないのかな?
0653デフォルトの名無しさん
2011/05/22(日) 16:22:54.39http://ideone.com/Mdu3w
別にフレンドでグローバルでなくても良い
0654デフォルトの名無しさん
2011/05/22(日) 16:30:46.19例えばもともとnothrowだったメソッドが実装変更で例外投げる仕様になったら困るだろ
中身は意識しなくていいのがカプセル化のメリットなのに
これでは何を投げるかドキュメントやソースを常にチェックしないといけない
そして変更があったらクライアントコードすべてを調べなければならない
例外のせいでカプセル化台無し。こんなバカな仕様があってたまるかってこと
0655デフォルトの名無しさん
2011/05/22(日) 16:39:36.63あ、コンパイル通った……
通らなかったときは何してたんだ……
サンクス
0656デフォルトの名無しさん
2011/05/22(日) 18:21:43.32struct 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++です
0657デフォルトの名無しさん
2011/05/22(日) 18:27:26.200658デフォルトの名無しさん
2011/05/22(日) 18:34:14.18ありがとうございます。
猫でもわかるCなんて買うんじゃなかった・・
0659デフォルトの名無しさん
2011/05/22(日) 20:16:22.38それは言語仕様というより、設計の問題では。
0660デフォルトの名無しさん
2011/05/23(月) 14:52:04.45{
public:
template <class CBoo> static int hogehoge(int CBoo::*);
…省略…
};
という(ような)クラスを目にしたのですが、
staticメソッド hogehoge の引数「int CBoo::*」 が意味不明です;;
これはなんの型なんでしょうか?
0661デフォルトの名無しさん
2011/05/23(月) 15:23:40.520662デフォルトの名無しさん
2011/05/23(月) 15:33:07.620663デフォルトの名無しさん
2011/05/23(月) 16:27:47.21型int のCBooメンバへのポインタって事ですね。
int を void に変えたらコンパイルエラーになったけど、
それは 型void のメンバなんてそもそもないからなんだね。
0664デフォルトの名無しさん
2011/05/23(月) 17:43:09.44hogehogeは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; }
0665デフォルトの名無しさん
2011/05/23(月) 18:07:23.67なんか指摘おかしくないか?
確かにhogehogeはstaticだから"CFooの"非staticメンバ変数にはアクセスできないけど
それが>>660となんの関係があるのかわからないな
hogehogeにメンバ変数のポインタ渡してるだけだぞ?
0666デフォルトの名無しさん
2011/05/23(月) 18:10:00.84そうなのか
そしたらメンバ変数のポインタを渡したhogehoge()内でどんな事がCBoo::*に対して
出来るのかがわからない
0667デフォルトの名無しさん
2011/05/23(月) 18:19:12.36コンパイルエラーになるっていうんだもの
おかしいってのはそこ
グローバル変数かstaticメンバ変数使えば何かすることはできるだろう
意味は知らんが
0668デフォルトの名無しさん
2011/05/23(月) 18:19:22.11class 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;
}
0669デフォルトの名無しさん
2011/05/23(月) 18:21:01.12ああやっぱりか
staticメンバ変数にstaticでないメンバへのポインタを渡してもコンパイルエラーになるだけだしな
0670デフォルトの名無しさん
2011/05/23(月) 18:32:23.08永遠に分からないだろう
0671デフォルトの名無しさん
2011/05/23(月) 20:56:25.55mainの中で char s[20]; と定義して、strcpy(s,recbuf); と書くと、
warning: passing argument 2 of 'strcpy' discards qualifiers from pointer target type
という警告が出ます。
どのように処理するのが正しいのかわからずに困っています。
どなたかこのワーニングの対処法がわかるかたいらっしゃいますか?
0672デフォルトの名無しさん
2011/05/23(月) 21:28:00.89キャストする
俺はconst_castはvolatileも外せるっていう程度の知識しかない人なので
それが本当に正しい対処法なのかは知らないが
0673デフォルトの名無しさん
2011/05/23(月) 21:33:43.36それが正しいかどうかがわからないので困ってます。
volatile char* を char* にキャストすることの意味が
いまいちよくわからないですよね。
0674デフォルトの名無しさん
2011/05/23(月) 21:51:53.100675デフォルトの名無しさん
2011/05/23(月) 22:33:05.350676デフォルトの名無しさん
2011/05/23(月) 23:09:09.73どうせ外さなくったって暗黙のキャストが発生するだろ
どうしたらいいんだよ
0677デフォルトの名無しさん
2011/05/23(月) 23:17:17.180678デフォルトの名無しさん
2011/05/24(火) 05:06:31.12自分はよくこういう事をします。(文法細かい部分無視で説明用に省略)
Class A{
MyDataClass data; // データ管理クラス
B ChildClass;
A(){ ChildClass.pdata = &data; }
}
Class B{
MyDataClass* pdata; // データ管理クラスポインタ
}
シングルトンパターンでの構築方法は知ってますが、ついついこっちのが簡単なのでやってしまいます。
こういうのは一般的なんでしょうか?それとももっと良い方法があるのでしょうか?
0679678
2011/05/24(火) 05:13:56.85シングルトンパターンで構築します。
しかし、我流の組み方故に果たして自分はオブジェクト指向プログラミングしているのか?
そもそもそんな構築方法でいいのか自信が無くなってきました。
そもそもテンプレートとかも利用価値を感じたことがありません。
単一オブジェクトや変数を扱うなら小細工いらないし、複数のオブジェクトを扱うようなら
テンプレートの中で条件分岐が大量に増えてややこしくなるので、別関数いくつも用意したほうがいいように思います。
0680デフォルトの名無しさん
2011/05/24(火) 08:44:54.64普通に弱参照つかったり、引数で親をリレーしたりとかじゃねーかな
0681デフォルトの名無しさん
2011/05/24(火) 10:46:56.93テンプレートの読み難さは尋常じゃないよな。
ありゃ完全にエロい人のための仕様だ。
0682デフォルトの名無しさん
2011/05/24(火) 11:06:21.92std::min()なんてシンプルそのものじゃないか。
0683デフォルトの名無しさん
2011/05/24(火) 12:30:12.27完全に後でちょっとした使用変更に対応する為のもの。
最初から組み込むのは混乱の元。
0684デフォルトの名無しさん
2011/05/24(火) 13:04:36.49もはや完全にバッドノウハウだから
だったら最初から言語機能に組み込んで綺麗に書けるようにしろよとは思う
0685デフォルトの名無しさん
2011/05/24(火) 13:37:02.25本当にこんなややこしいもので開発なんてできるのけ?
0686デフォルトの名無しさん
2011/05/24(火) 13:48:04.47AとBのメソッドがあり、複数のスレッドで非同期的にメソッドが呼ばれています。
AとAが同時に呼ばれるときに排他処理をする必要は無いのですが、AとBが同時に呼ばれてはいけないので、排他処理をする必要があります。
この場合、一般的にはどのように排他すればよいのでしょうか?
Windows環境でWin32APIを使用しています。
0687デフォルトの名無しさん
2011/05/24(火) 17:36:12.120688デフォルトの名無しさん
2011/05/24(火) 19:52:09.97問題が発生するような多重継承が出てきた時点で
設計がおかしいくないか疑うべきだがな
0689デフォルトの名無しさん
2011/05/24(火) 22:01:42.860690デフォルトの名無しさん
2011/05/24(火) 22:28:25.36腕の良いプログラマーが書いたほう。
0691デフォルトの名無しさん
2011/05/24(火) 22:57:03.380102 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);
0692デフォルトの名無しさん
2011/05/24(火) 23:03:00.82$ ./a.out
1 0 4
です。
0693デフォルトの名無しさん
2011/05/24(火) 23:06:05.141バイト目が1(正しい)
2〜3バイト目が0(間違え)
4〜7バイト目が変わらず(間違え)
です。とにかくおかしいです。
0694デフォルトの名無しさん
2011/05/24(火) 23:12:58.60それ以降一切読めなくなるのですね。
飛んだ欠陥品だ > ifstream
0695デフォルトの名無しさん
2011/05/24(火) 23:22:25.71buf_1, buf_2, buf_4の型は?
0696デフォルトの名無しさん
2011/05/25(水) 01:58:32.67clear()やってないに1票
0697デフォルトの名無しさん
2011/05/25(水) 02:37:23.53いきなりだが、ゲームプログラムの噺です。
0698デフォルトの名無しさん
2011/05/25(水) 03:00:50.40欠陥品なのは君の頭の方です
#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;
}
0699デフォルトの名無しさん
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
0700デフォルトの名無しさん
2011/05/25(水) 05:35:25.85#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」と怒られるのだけれど、
なして? それと、クラス構造をそのままにしたい上でこういうとき、どうやったら良いんでしょう。
無理なのかな
0701デフォルトの名無しさん
2011/05/25(水) 06:10:02.380702デフォルトの名無しさん
2011/05/25(水) 06:21:29.13やっぱりそうなんかー
enumは値の名前がグローバルになるのでイヤなんだ
結局クラス外にインナークラスを追い出して、
クラスじゃなくてnamespaceにしました orz
※
でもA.cppの中にmainがあると上のソースで通るんだよなぁ
なんなんだー
0703デフォルトの名無しさん
2011/05/25(水) 06:24:55.200704デフォルトの名無しさん
2011/05/25(水) 08:35:09.630705デフォルトの名無しさん
2011/05/25(水) 09:01:17.200706デフォルトの名無しさん
2011/05/25(水) 09:24:26.67ifstream 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
0707デフォルトの名無しさん
2011/05/25(水) 09:52:56.11int xxx() {
if (i == 0) {
...
} else {
...
}
}
};
このメンバー関数xxxをテンプレート関数にしてifを使用しないようにしたいと思っています。
i == 0で特殊化すれば良いと思うのですが、どのように記述すればよいですか?
0708デフォルトの名無しさん
2011/05/25(水) 09:54:27.14でした。
0709デフォルトの名無しさん
2011/05/25(水) 10:28:32.90int xxx( void )
private:
int xxxZero( void ) { ... }
int xxxNonZero( void ) { ... }
};
0710デフォルトの名無しさん
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; }
0711デフォルトの名無しさん
2011/05/25(水) 10:56:44.45ありがとうございます。思ってたより複雑だなあ。精進します。
> template < int i > struct helper { } ;
これはint => 型に変換? マップ?するテクニックでしょうか?
0712デフォルトの名無しさん
2011/05/25(水) 11:09:10.06>707ではメンバ関数だけどクラスから独立させちゃっていいの?
それだったらもっとずっと簡単。
0713デフォルトの名無しさん
2011/05/25(水) 11:20:20.340714デフォルトの名無しさん
2011/05/25(水) 11:24:58.750715デフォルトの名無しさん
2011/05/25(水) 11:31:33.540716デフォルトの名無しさん
2011/05/25(水) 11:31:39.54ごくまれに実行ファイルの明らかに計算結果がおかしくなってしまうことがあって、
前ファイルをリビルドすると治ります。
これってC++だと起こりうることなんでしょうか。
それともPCのどこかがおかしくてobjファイルが壊れたりしているのでしょうか。
0717デフォルトの名無しさん
2011/05/25(水) 11:36:18.27VC++がおかしいまたは時計がおかしい
C++がおかしいということは無い
0718デフォルトの名無しさん
2011/05/25(水) 11:38:46.920719デフォルトの名無しさん
2011/05/25(水) 11:43:38.10project propertyのC++/GeneralのTreat warnings as errorsをyesにしろ。これで9割方解決する。
0720デフォルトの名無しさん
2011/05/25(水) 11:43:40.850721デフォルトの名無しさん
2011/05/25(水) 12:42:43.68アライメント関係無い
バイナリを>><<で読み書きすんな
0722デフォルトの名無しさん
2011/05/25(水) 14:29:22.25C言語の勉強をやり直せ。
>>706の使い方は完全に正しい。
0723デフォルトの名無しさん
2011/05/25(水) 14:59:56.830724デフォルトの名無しさん
2011/05/25(水) 15:58:57.99アホ
>>706はC++だよ
しかもテキストデータではなくバイナリデータを読み書きしてるんだ
バイナリデータに>>と<<は禁物
C言語でもバイナリデータの読み書きにはfread()とfwrite()を使うだろうが
それと同じ
よく話が分かってないのに余計な首突っ込むなカス
0725デフォルトの名無しさん
2011/05/25(水) 16:11:12.59あまり弱いものいじめはするな。彼は可愛そうな子なんだ
0726デフォルトの名無しさん
2011/05/25(水) 16:11:21.86バカはお前だ。ifstreamはバイナリ専門ではない。
わからないなら引っ込んでろ。
0727デフォルトの名無しさん
2011/05/25(水) 16:12:42.50int number;
ifs >> number;
↑ これは完全に正しい。分かったら恥ずかしさのあまり布団に頭突っ込んで悶えてろ。
0728デフォルトの名無しさん
2011/05/25(水) 16:18:29.41から読み取るものと考えると1byteが1文字に対応する多くの環境なら問題ないのかな?
一応openmodeにbinaryフラグが用意されてるからこういう使い方も想定済みとは思うのだけど
0729デフォルトの名無しさん
2011/05/25(水) 17:12:41.89まだ言ってるのかしつこいなあ
話は>>706から来てるんだぞ
「バイナリデータ」と書いてあるのが目に入りませんか?めくらですか?
0730デフォルトの名無しさん
2011/05/25(水) 17:19:53.26"dump.bin"の中身が a 111 222 とかだったら>>でいいだろう
しかし今の場合は 01 02 00 04 00 00 00 と続くバイナリデータの読み書きだ
この場合はオープンの時に>>699のように std::ios::binary を指定し、さらに
メンバ関数 get() でないと正しく読み取れない
もちろん改行文字など指定してはいけない
テキストではないのだからね
嘘だと思うんなら自分でバイナリファイルを作って読み書きしてみろ
0731デフォルトの名無しさん
2011/05/25(水) 17:41:34.90によるとデータの解釈を伴う抽出するのが>>の役割だから
これを元にすればその解釈という作業が必要無い生データを読み込む場合であることと
別にgetなどのunformatted dataに対する操作を提供するメンバ群が用意されていることを考えると>>の使用は不適であることは言えるか
0732デフォルトの名無しさん
2011/05/25(水) 17:45:26.34「言えるか」じゃなくて実際に試してみろって
話はそれからだ
話がややこしくならないようにgccを使え
0733デフォルトの名無しさん
2011/05/25(水) 17:47:39.58お前がまず試せよ低能
0734デフォルトの名無しさん
2011/05/25(水) 17:52:18.80#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
0735デフォルトの名無しさん
2011/05/25(水) 18:06:16.66ちなみに使ったファイルは>>699と同じ物
バイナリエディタで中身を覗けるから間違いない
0736デフォルトの名無しさん
2011/05/25(水) 18:55:41.690737デフォルトの名無しさん
2011/05/25(水) 19:00:09.200738デフォルトの名無しさん
2011/05/25(水) 19:00:27.15お前みたいのが多いから
0739デフォルトの名無しさん
2011/05/25(水) 19:04:42.58まったく禁止されてない。もう見てられない
0740デフォルトの名無しさん
2011/05/25(水) 19:08:54.600741デフォルトの名無しさん
2011/05/25(水) 19:15:06.340742デフォルトの名無しさん
2011/05/25(水) 19:17:49.680743デフォルトの名無しさん
2011/05/25(水) 19:48:15.25class 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氏に期待
0744722
2011/05/25(水) 19:50:05.56俺の勘違いだった
0745デフォルトの名無しさん
2011/05/25(水) 21:04:41.51またのご利用をお待ちしていません。
0746デフォルトの名無しさん
2011/05/25(水) 21:19:46.18バーカ
仕様書ぐらい用意しとけ
恥かくぞ
0747デフォルトの名無しさん
2011/05/25(水) 21:20:37.20OSも書ける低レベル言語です
0748デフォルトの名無しさん
2011/05/25(水) 21:52:05.42get()じゃなくてread()を使わなければならない
get()では改行文字が現れるとそこで読み取りを終了してしまう
まあ operator>>でバイナリを読み取れると顔を真っ赤にしてファビョっていた
ヤシよりはマシだけどな
0749デフォルトの名無しさん
2011/05/26(木) 00:44:12.10コマンドプロントでディレクトリの移動がよく分かりません。
デスクトップ上に保存しているメモ帳に「test.c」と名前を付け
chdir C:\Users\ユーザー名\Desktop\test.c.txt
とコマンドプロンプトに入力したところ
ディレクトリ名が無効ですとなりました。
ディレクトリ名に問題があるとおもうのですがどうなおせば良いのでしょうか?
独習Cという本を買ってさっきから始めたのですがこの辺詳しく載っていなくて困っています
0750デフォルトの名無しさん
2011/05/26(木) 00:49:17.83違うならそこ削らないと
0751デフォルトの名無しさん
2011/05/26(木) 00:49:34.530752デフォルトの名無しさん
2011/05/26(木) 00:53:10.05どうやらディレクトリとファイルの区別が付いていなかったようです。
調べてみたらなんとか解決しました。ありがとうございます。
0753デフォルトの名無しさん
2011/05/26(木) 01:50:34.740754デフォルトの名無しさん
2011/05/26(木) 17:12:19.440755デフォルトの名無しさん
2011/05/26(木) 17:28:38.37inはstandard input
0756デフォルトの名無しさん
2011/05/26(木) 18:23:19.70当時はキャラクタベースだから、(c)onsole とか、バイト単位だから (c)haracter とか、
好きなの選べ。
0757デフォルトの名無しさん
2011/05/26(木) 18:40:39.970758デフォルトの名無しさん
2011/05/26(木) 18:44:48.75"c"は"character"の略です。これは、iostreamsが値とバイト(文字)表現を対応づけるものであるという理由からです。
0759デフォルトの名無しさん
2011/05/26(木) 19:19:27.34でもたしかにiostreamヘッダだしconio.hみたいに明記されてるわけじゃないな
0760デフォルトの名無しさん
2011/05/26(木) 20:24:01.25CとC++一緒にすんな
0761デフォルトの名無しさん
2011/05/26(木) 21:07:57.230762デフォルトの名無しさん
2011/05/26(木) 21:32:15.61変な端折り方だな。
coutはなんとなく意味分かるのに。
0763デフォルトの名無しさん
2011/05/27(金) 01:42:31.93マップに座標を打ち込みつつ初期化
{0,0,0}
{0,1,1}の様な形。
for文でマップのマス目左上からズレていくように書き
switch文で case 0 は DrawGraph 画像 case 1 は 〜〜
の様にしてみたんですが、上手く表示されません・・・。
マス目ごとに対応した番号の画像を表示させるにはどのようにすれば宜しいでしょうか?
0764デフォルトの名無しさん
2011/05/27(金) 02:15:37.60INput
OUTput
むずかしいね
0765763
2011/05/27(金) 04:39:14.04スレ間違えました
0766デフォルトの名無しさん
2011/05/27(金) 19:02:14.31?
0768デフォルトの名無しさん
2011/05/29(日) 17:43:18.41お前が気持ち悪い
0769デフォルトの名無しさん
2011/05/29(日) 19:25:46.47関数の戻り値にして、main関数で受け取るということはできるでしょうか?
一応、できるみたいなんですが、文法上ただしいのでしょうか・・
なんしろ、コンストラクタというと、新しいオブジェクト生成しか使ったことがないんで・・
0770デフォルトの名無しさん
2011/05/29(日) 19:57:57.87「コンストラクタを関数の戻り値」というのがよくわからないが、これのこと?
値を返すならコピーされるから問題ない。
string f()
{
return string("abc");
}
int main()
{
cout << f() << endl;
}
0771デフォルトの名無しさん
2011/05/29(日) 20:14:29.210772デフォルトの名無しさん
2011/05/29(日) 20:26:32.64>>769はなにをしたいんだろうな
オブジェクトを生成する関数を変数に入れたいとか?
0773デフォルトの名無しさん
2011/05/29(日) 20:40:17.850774769
2011/05/29(日) 21:21:04.85return Area(); // Areaクラスのコンストラクタ
}
void Ex :: nanigasi() {
Area area = getArea();
}
0775デフォルトの名無しさん
2011/05/29(日) 21:24:55.16Area関数のコンストラクタを使っています。
以上のことは、C++の文法上許されていることなんでしょうか?
もちろん、最初から、2番目の関数(getArea関数)で、
Areaクラスのオブジェクトを作れば一番簡単なのは当たり前ですが・・
0776デフォルトの名無しさん
2011/05/29(日) 21:25:30.72それがコピーされてareaに代入される
そりゃ結果的に当然コンストラクタ自体は呼び出されるが、
コンストラクタを直接呼び出してるわけじゃない
0777769
2011/05/29(日) 21:27:00.40>最初から、2番目の関数(getArea関数)で、
最初から、2番目の関数(nanigasi関数)で、
です・・・
0778769
2011/05/29(日) 21:29:13.73ああ、一時オブジェクトの生成っていうんですか。この場合は。
本を読んでいて、なにか、見慣れない構文だなと疑問におもっていて
どうも頭を悩ましていましたので・・
ありがとうございます。だいぶすっきりしました。「一時オブジェクトの生成」で、
よくググッてみます。
ありがとうございました。
0779デフォルトの名無しさん
2011/05/29(日) 21:30:20.88メンバ関数へのポインタなら返せる
staticじゃなければthis、つまり本体のオブジェクトを指すポインタも必要だが・・・・
0780デフォルトの名無しさん
2011/05/29(日) 21:38:39.260781デフォルトの名無しさん
2011/05/29(日) 21:40:33.63エッジの作成をノードを2つランダムに選んで作成ってすると、明らか遠すぎる所
と繋がっちゃってぐちゃぐちゃな経路になってしまう。
よくあるこんな図みたいに、ある程度近くのノードと繋がってる綺麗な経路をランダムに
作る方法ってありませんか?
0782デフォルトの名無しさん
2011/05/29(日) 21:47:44.98テスト用に生成するだけだから、実行速度や正確性を求めるよりも楽に作れる方が良いです
ttp://www.deqnotes.net/acmicpc/dijkstra/graph.png
0783デフォルトの名無しさん
2011/05/29(日) 22:17:09.78GNU General Public License
でのソフトを、自分のソフトが途中で起動する、という状況の時、
自分のソフトと利用するソフトの両方を配布するなら自分もGNUである必要がありますか?
また、もし自分のソフトを使う人に、GNUのソフトのダウンロードを任せるとしたら、
自分のはGNUである必要がありますか?
0784デフォルトの名無しさん
2011/05/29(日) 22:22:16.26平面グラフにするとか、n部グラフにするとか
0785783
2011/05/29(日) 23:26:35.740786デフォルトの名無しさん
2011/05/29(日) 23:45:09.49どの程度の規模で作るのかにも寄るけれど、せいぜい100ノードくらいでいいのなら、
全ノード間の距離を計算してもたいしたことないんじゃないか?
あとは、各ノードで距離順にソートして、範囲も個数も好きにしたまえ。
0787デフォルトの名無しさん
2011/05/30(月) 03:01:36.08ありがとう、楽な方の予め距離計算して近い物同士を繋げる方法でいってみることにします。
0788デフォルトの名無しさん
2011/05/30(月) 09:41:01.83距離をパラメーターにして、乱数を一様ではなく正規分布とか、自然な分布にすればそれっぽく見えると思うよ
0789デフォルトの名無しさん
2011/05/30(月) 15:42:46.99どうすればできますか?
一度vectorから取り出して、自分で書いたソート関数でソートしてまた戻すってするしかない?
0790デフォルトの名無しさん
2011/05/30(月) 15:54:09.120792デフォルトの名無しさん
2011/05/30(月) 17:12:39.450793デフォルトの名無しさん
2011/05/30(月) 17:15:23.020794デフォルトの名無しさん
2011/05/30(月) 17:20:33.75環境とオブジェクトの個数にもよるけれど、オブジェクト数に対してメモリが十分あるなら
vectorで保持してそれとは別に、setなりmapなりで比較関数を用意して、
オブジェクトを登録するメソッドを呼ぶたびに、vectorと、ソート用コンテナにポインタで
登録するとかした方が楽じゃないか? かっこわるい?
0796デフォルトの名無しさん
2011/05/30(月) 17:47:25.190797デフォルトの名無しさん
2011/05/30(月) 17:55:30.03自分で書いたソート関数って叙述関数の事か
普通の関数にしろ関数オブジェクトにしろlambda式にしろ std::sort()で行けるだろ
もちろんdeep copyをするためにコピーコンストラクタと代入演算子は定義しとくのが
コンテナにクラスを入れる必要条件だが
0798デフォルトの名無しさん
2011/05/30(月) 22:00:00.50今までoperatorって難しそうだし面倒そうだと、勉強せず避けてきてたけど、やってみれば
意外とすんなり理解できたし、何よりすごく便利だね
もっと早く身につけておくべきだった
0799デフォルトの名無しさん
2011/05/30(月) 22:13:42.730800デフォルトの名無しさん
2011/05/30(月) 23:15:30.760801デフォルトの名無しさん
2011/05/30(月) 23:57:48.21いやいやshallow copyしか必要ないクラスにはいらないだろ
要するにコンテナに入れるクラスの要件がCopy ConstractableでCopyableであればよい
最初なぜauto_ptrがコンテナに入れられないのか随分悩んだけどそのお陰でよく理解できた
0802デフォルトの名無しさん
2011/05/31(火) 00:01:29.360803デフォルトの名無しさん
2011/05/31(火) 00:02:38.46今はな
その当時はboostなんか無かったんだよ
0804デフォルトの名無しさん
2011/05/31(火) 00:14:37.34> その当時
> 789 名前:デフォルトの名無しさん[sage] 投稿日:2011/05/30(月) 15:42:46.99
え?
0805デフォルトの名無しさん
2011/05/31(火) 03:46:23.25途中からバイナリモードで読み取りをしたくなった場合、
どのようにモードを変更すればいいですか?
0806デフォルトの名無しさん
2011/05/31(火) 03:53:14.820807デフォルトの名無しさん
2011/05/31(火) 04:24:04.15ありがとうございます。なんかトンチンカンな質問だったかもしれません
0808デフォルトの名無しさん
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;
}
0809デフォルトの名無しさん
2011/05/31(火) 05:28:12.08あとeof()の使い方が間違ってる
それじゃ一回余計にread呼んでByteNumも1足しちゃうよ
0811デフォルトの名無しさん
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に==や=を単純に定義するだけじゃ無理なんでしょうか
無理な場合、なぜ無理かという構造を教えてくれたらうれしいです
できる場合、なにが足りないのか教えていただけたら助かります
お願いします
0812デフォルトの名無しさん
2011/05/31(火) 15:27:53.08すいません
お騒がせしました
0813デフォルトの名無しさん
2011/05/31(火) 16:51:42.45全部読んだじゃ無いか。
0814デフォルトの名無しさん
2011/05/31(火) 17:51:06.91こういう事だろ
std::vectorにはメンバ関数operator==があるので、これを呼び出すとコンテナ内の
オブジェクトのoperator==をそれぞれ呼び出して比較する
http://ideone.com/12uke
0815デフォルトの名無しさん
2011/06/01(水) 07:07:38.25std::equal
0816デフォルトの名無しさん
2011/06/01(水) 07:14:01.86すいません
どうもコンテナに入れるクラスにoperator==を定義するとき、
引数と関数自体をconstにしないといけないみたいですね
そしてconstで受け取ったクラスインスタンスのメンバにコンテナがあったら
返ってくるイテレータ型がiteratorじゃなくてconst_iteratorなんですね
勉強になりましたが、C++ややこしいっす……
0817デフォルトの名無しさん
2011/06/01(水) 09:10:09.38そうなのかかえって勉強になった
俺はconstの参照で引数をバインドすると引数の受け渡しが高速になるので
そうしていただけだが(コピーコンストラクタの呼び出しが行われない)、const関数は
非constの引数も受け取れるけどその逆はだめだからな
0818デフォルトの名無しさん
2011/06/01(水) 11:35:17.70新しいストリームオブジェクトを返す関数があったとして
MyStream * convert(MyStream *source)
この関数はストリームのヘッダ位置をどうするのが一般的?
source ストリームのヘッダ位置は関数呼び出しの時点に戻しておく
source ストリームのヘッダ位置は元に戻さず、最後に読み取った位置で放置
関数が返すストリームはヘッダ位置を0にしておく
関数が返すストリームはヘッダ位置はデータ末尾(追記可能な位置)にしておく
用途によって違うなら、想定しているのは...
ZIPからファイルを読み出す MyStream file = GetFileFromZipStream(zipStream) とか
スクリプトのプリプロセッサ MyStream preprocessedSource = RunPreprocessor(rawSourceTextStream) とか。
0819デフォルトの名無しさん
2011/06/01(水) 14:39:43.260820デフォルトの名無しさん
2011/06/01(水) 15:15:43.93これって今や、「C++が」ややこしいって印象になるんだな…
0821デフォルトの名無しさん
2011/06/01(水) 15:35:54.51kwsk
0822デフォルトの名無しさん
2011/06/01(水) 18:18:14.79virtualつけると具体的なオブジェクトから抽象的な概念としての存在になる辺りがまどかのラストに似てるから。
//魔法少女クラスの宣言
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);
};
//あと書くのめんどいや。
0823デフォルトの名無しさん
2011/06/01(水) 18:29:35.92char a[10000000] ってでかい配列作ったら大きすぎてプログラムがメモリ確保できなくて動きませんでした。
こういうのって一般的にどうやって解決するんでしょうか?
0824デフォルトの名無しさん
2011/06/01(水) 18:32:01.53先頭にstaticつけとけ
0825デフォルトの名無しさん
2011/06/01(水) 23:10:06.09ファイルをメモリの代わりに使う
0826デフォルトの名無しさん
2011/06/02(木) 07:29:25.05newかmallocで確保
0827デフォルトの名無しさん
2011/06/02(木) 11:06:40.371.CreateWindowで作った子窓を移動・消去するにはどうすれば良いのでしょうか?
2.CreateWindowで作った子窓同士を、いちいちマウスでクリックせずキー操作でフォーカスを移動したいのですが
そうした方法の解説サイトは無いでしょうか?
0828827
2011/06/02(木) 12:11:45.16フォーカスについても自己解決目指していろいろ調べてみようかと思います。
0829デフォルトの名無しさん
2011/06/02(木) 12:15:02.680830デフォルトの名無しさん
2011/06/02(木) 12:32:45.84それが正解です。
見えないところは、マルチディスプレイに気をつけるように。
0831デフォルトの名無しさん
2011/06/02(木) 13:08:35.390832デフォルトの名無しさん
2011/06/02(木) 13:13:05.010833827
2011/06/02(木) 13:35:44.82>>830
マルチディスプレイ・・環境に対しても気をつけ様と思います。
ご助言ありがとうございました。
0834デフォルトの名無しさん
2011/06/02(木) 17:06:41.43829さんの忠告が見えないの?
見えないところに移動じゃなくてShowWindowで何とかしろ。
0835デフォルトの名無しさん
2011/06/02(木) 20:59:27.45同じリストの内容を持つコンボボックスを16個作りたい。(IDC_COMBO1~16)
16個のDDX変数を用意し、16回値を格納するのは綺麗じゃないので1個のDDX変数でなんとかしたいです。
ソースは以下の物で練習しています。
http://www.g-ishihara.com/mfc_cb_01.htm
どのようにすれば簡潔にかけるでしょうか?
0837デフォルトの名無しさん
2011/06/03(金) 07:23:30.44http://headline.2ch.net/test/read.cgi/bbynews/1307041589/
二進数かよ
0838デフォルトの名無しさん
2011/06/03(金) 07:29:14.70どうせbfを差し替えただけなんだろ
0839デフォルトの名無しさん
2011/06/03(金) 07:47:25.060840デフォルトの名無しさん
2011/06/03(金) 08:11:12.320841福盛俊明
2011/06/03(金) 09:11:45.19俺に答えられない質問はない
質問はこちらへ
http://www.geocities.jp/courant_de_console/main_street/index.html
アハアハ〜♪”
0842デフォルトの名無しさん
2011/06/03(金) 19:30:13.92それまでに開いていたストリームを閉じてしまいたいのですが、
やり方があるならば、どなたか教えてください
0843デフォルトの名無しさん
2011/06/03(金) 19:52:46.95abort呼び出しはシグナルSIGABRTを投げるので、
signalハンドラでそれを拾えばそういうこともできる
0844デフォルトの名無しさん
2011/06/03(金) 20:01:23.500845デフォルトの名無しさん
2011/06/03(金) 20:12:25.880846デフォルトの名無しさん
2011/06/03(金) 20:13:25.380847デフォルトの名無しさん
2011/06/03(金) 20:20:44.26低能哀れすぎwww
0848デフォルトの名無しさん
2011/06/03(金) 22:18:20.470849デフォルトの名無しさん
2011/06/03(金) 22:20:08.55バックトレース拾えないから
0850デフォルトの名無しさん
2011/06/03(金) 22:21:06.090851デフォルトの名無しさん
2011/06/03(金) 22:21:58.110852デフォルトの名無しさん
2011/06/03(金) 22:39:54.51つまり、登録したハンドラの実行後プログラムは終了する
0853デフォルトの名無しさん
2011/06/03(金) 22:44:07.98atexit()で関数を登録して、そこでfcloseall()を呼ぶとか。
0854デフォルトの名無しさん
2011/06/03(金) 22:44:43.67abortだから無理っしょ
0855デフォルトの名無しさん
2011/06/03(金) 22:45:52.06if文書いて中の最後でexit呼べば良いと思う
0856デフォルトの名無しさん
2011/06/03(金) 23:00:49.16#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;
}
0857デフォルトの名無しさん
2011/06/03(金) 23:05:04.75そんな事は書いてない。
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してハンドラから帰ってこ
なかった場合の事を述べている。
0858デフォルトの名無しさん
2011/06/03(金) 23:13:43.960859デフォルトの名無しさん
2011/06/03(金) 23:42:52.63ん?だからSIGABRTハンドラからabort()の呼び出し側へ戻ることは出来ず
ハンドラ実行後はプログラムが異常終了するんだろ?>>852の通りじゃん
0860デフォルトの名無しさん
2011/06/03(金) 23:45:49.77ちゃんと文脈は読もうね
0861デフォルトの名無しさん
2011/06/03(金) 23:56:54.58assertしといてcloseはしたいという
ありえない話を前提にしても意味がなくね?
0862デフォルトの名無しさん
2011/06/03(金) 23:57:19.13日本語訳が必要?
> abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
> 場合に、異常プログラム終了を引き起こす。
>>852
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
こんなこと書いてないじゃん。
>>860
用語間違えたなら言い訳しないでそういえよ。
SIGABRTハンドラはリターンすることも、リターンしないことも可能。
リターンしないのはabort()
0863842
2011/06/03(金) 23:58:28.43数値計算のシミュレーションをやっていて、変数の中身を追っていたのです.
ofstreamで変数の値を出力させていたのですが、assert()で止まると、
途中の結果が反映されないものだと思い込んでおり、閉じ方を聞いてみたのですが、
再度の確認してみたら普通にデータが書き込まれてました。
助言して下さった皆さん、ありがとうございました。(どうみても無能です)
スレチで申し訳ないのですが、数値計算やシミュレーション関係のプログラムって、
どんな感じでプログラムを書いていくものなのでしょうか?今のところ
#if DLEVEL > 1
ofs << t << "\t" << x << std::endl;
#endif
をあちこち埋め込んでいるのですが、ソースが全体的に汚くて見通しが悪いし、
条件分岐や関数を入れると時間が掛かるので、何かうまい方法はないものかなと
0864デフォルトの名無しさん
2011/06/04(土) 00:01:03.80関数のスタック領域にメモリを確保してるんじゃない?
グローバル領域かヒープ領域でなら、回避できた経験はあるけど、
詳しいことは、この板のグルを待って
0865デフォルトの名無しさん
2011/06/04(土) 00:02:24.14英語なんて誰でも読めるよ
>>851が「シグナルハンドラから戻ってきたら」って書いたから
戻れないって書いたんだけど、そんなに不思議?
日本語読めない?アホなの?
0866デフォルトの名無しさん
2011/06/04(土) 00:11:04.22>> abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
>> 場合に、異常プログラム終了を引き起こす。
つーか、思わずスルーしてたけどそれ訳間違ってんじゃん
アホ過ぎるだろ
0867デフォルトの名無しさん
2011/06/04(土) 00:19:28.08いや、読めないようだから。
> シグナルハンドラから戻ってきたら
普通に戻れる。戻れないと主張するなら↓このシグナルハンドラはどこに戻るんだよ。
void abort_handler(int sig)
{
}
0868デフォルトの名無しさん
2011/06/04(土) 00:23:32.28さっすが、英語も日本語も読めないアホは違うね
>>851を読めば、この文脈で戻る/戻らないで指してる場所は
abort()の呼び出し元のことだと分かるだろ?
0869デフォルトの名無しさん
2011/06/04(土) 00:25:50.02abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
場合"を除き"、異常プログラム終了を引き起こす
unlessすら読めないアホが何言っても無駄
0870デフォルトの名無しさん
2011/06/04(土) 00:32:18.35ああ、「除く」を余計に削除しすぎた。これはすまない。
>>868
あほ、>>851はabortの実装の事だ。
ライブラリソース見てないから推測だが、シグナルハンドラから戻った後にもう一回自殺するんだろう。
この規格書の原文は? こんなことどこにも書いてないよね。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0871デフォルトの名無しさん
2011/06/04(土) 00:42:35.94いい加減うざい
0872デフォルトの名無しさん
2011/06/04(土) 00:44:15.67> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0873デフォルトの名無しさん
2011/06/04(土) 00:50:06.53英語もろくに読めず、文脈もろくに読めない低能が
言いがかりつけて来たんじゃないの?www
えーと、それとも間違っててごめんって謝って欲しいの?
「そんなに粘着質でアホとは思わなかったよ。こんなアホがこの世に存在するとは思ってなかった。
分かってたら相手にしなかったよ、ごめんねー」
0874デフォルトの名無しさん
2011/06/04(土) 00:59:42.38> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0875デフォルトの名無しさん
2011/06/04(土) 01:02:55.30自己紹介はいらないよ。
シグナルハンドラから帰るのはシグナル送ったabortの中であることは当たり前だし、
英語読めれば↓こんなウソ書かないもんね。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0876デフォルトの名無しさん
2011/06/04(土) 01:07:24.15かっこわるー
0877デフォルトの名無しさん
2011/06/04(土) 01:09:20.25とか書いて間違えるとかwww
0878デフォルトの名無しさん
2011/06/04(土) 01:12:51.17流し読みでも接続詞の論理構造は把握するから
大方どっかからコピペしてきたんだろ
で、英語読めないから間違いに気付かない
0879デフォルトの名無しさん
2011/06/04(土) 01:13:14.76スレを勃てるまでもないC++の質問はここで
にして欲しい
誰も聞いちゃいないのに毎回毎回おっぱじめる
おっさん同士のオーラルセックスは気持ち悪い
0880デフォルトの名無しさん
2011/06/04(土) 01:33:38.920881デフォルトの名無しさん
2011/06/04(土) 01:57:04.15それは謝ったぞ。カッペしたときに抜けた。
でも、英語が読めれば↓こんな間違いしないよな。
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0882デフォルトの名無しさん
2011/06/04(土) 07:40:59.58カットアンドペーストの失敗?www
問:以下の文の括弧内に文章を入れて正しい文にしなさい
abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない
場合に()、異常プログラム終了を引き起こす。
0883デフォルトの名無しさん
2011/06/04(土) 07:54:39.56vectorなりに計算中は溜めておいて
assertの代わりにthrow投げて
catchでvectorの中身をファイルに書き出して終了とした方が
実効速度早いと思うよ
0884デフォルトの名無しさん
2011/06/04(土) 08:36:56.68結局、どの言語規格書に↓が書いてあるんだ? 書いてあったとして、ハンドラがリターンしないというのはおかしいと思わないのか? www
> 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
0885デフォルトの名無しさん
2011/06/04(土) 08:59:51.62C言語の仕様的に考えて>>868以外の読み方できんだろうが
むしろ、それ以外にどんな意味があると思ったのが知りたいわ
で、コピペミスって言い訳はどうしたの?www
0886デフォルトの名無しさん
2011/06/04(土) 09:09:13.71そういう意味で言ってると思ったの?
だったら>>852の二行目の文と繋がらないじゃん
0887デフォルトの名無しさん
2011/06/04(土) 10:37:14.280888デフォルトの名無しさん
2011/06/04(土) 11:26:05.69それはオレが一番知りたい。「シグナルハンドラから戻ってきたら」と言ったら
「規格書にSIGABRTハンドラはreturnしないと書いてある」と言いがかりをつけられたんだから。
ボンクラの考えることは全くわからん。
>>860で>>851への言いがかりだと言ってるんだから、見苦しい言い訳すんなよ。
0889デフォルトの名無しさん
2011/06/04(土) 16:24:43.42> それはオレが一番知りたい。(キリリッ
コピペミスって言い訳も嘘バレバレで笑ったけど
自演もヘタクソだなwww
0890デフォルトの名無しさん
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;
}
0891842
2011/06/04(土) 16:44:45.97良さそうな方法ですね。ただ、今に書いているプログラムでは
ループ回数が100万回ぐらいあるので、配列やvectorは利用し難いです。
各関数を通過するときにうける引数の値も確認したいですし。
それと、throwやcatchを使うことで条件分岐やジャンプ命令なんかが
ループ内部に入りそうな気がするのです。
assert()なら、NDEBUGのマクロを定義すれば、空行になってくれるといった
記事を見たことがあったので使っているんですが。
0892デフォルトの名無しさん
2011/06/04(土) 18:06:49.73ボンクラは言い逃れも支離滅裂だな。
既に間違いを認めているカッペに突っ込んで話題をそらすしかないんだろうな。
SIGABRTハンドラはreturnしないと書いてある言語規格書はどこにあるんだ?
0893デフォルトの名無しさん
2011/06/04(土) 18:09:18.75週刊プログラム
的な。
0894デフォルトの名無しさん
2011/06/04(土) 18:10:08.01int でいいんでしょうか? なんとなっくunsignendのが正しいような気がするんですが
intでいいんですか?
0895デフォルトの名無しさん
2011/06/04(土) 18:11:49.910896デフォルトの名無しさん
2011/06/04(土) 18:16:09.45言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0897デフォルトの名無しさん
2011/06/04(土) 18:26:58.71とりあえずマクロ作って1行にまとめてみるとか?
ttp://ideone.com/Qmarv
0898デフォルトの名無しさん
2011/06/04(土) 18:34:08.22「インターフェース」とか?
0899デフォルトの名無しさん
2011/06/04(土) 18:57:26.40コード中にミスがあったり、意図したどおりに動くかどうかを確認しようとしてもものすごく時間がかかって不効率のように思います。
0900デフォルトの名無しさん
2011/06/04(土) 18:57:56.69自演バレたからって発狂すんなよwww
このスレで今sageて無いのお前だけだから一発で分かったわwww
0901デフォルトの名無しさん
2011/06/04(土) 19:02:41.740902デフォルトの名無しさん
2011/06/04(土) 19:15:58.08バカのくせに負けず嫌い。バカだからリアルでも連敗なんだろうな。www
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0903デフォルトの名無しさん
2011/06/04(土) 19:19:25.300904デフォルトの名無しさん
2011/06/04(土) 19:21:48.450905デフォルトの名無しさん
2011/06/04(土) 19:29:46.27がんばれ
0906デフォルトの名無しさん
2011/06/04(土) 19:35:10.90言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0907デフォルトの名無しさん
2011/06/04(土) 19:44:26.26英語も読めないアホがスレ荒らすな
0908デフォルトの名無しさん
2011/06/04(土) 20:02:41.18言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0909デフォルトの名無しさん
2011/06/04(土) 23:59:34.50それをカッペ抜けとか誤摩化したあげく嘘がバレて
言い逃れできなくなった気分はどう?
0910デフォルトの名無しさん
2011/06/05(日) 00:37:53.260911デフォルトの名無しさん
2011/06/05(日) 01:46:06.72言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0912デフォルトの名無しさん
2011/06/05(日) 10:28:00.38よそでやれ
0913デフォルトの名無しさん
2011/06/05(日) 11:08:32.55言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0914デフォルトの名無しさん
2011/06/05(日) 11:42:15.71(キリッ
きもいからどっかいけ
0915デフォルトの名無しさん
2011/06/05(日) 11:58:52.34distccで高速化とか?
0916デフォルトの名無しさん
2011/06/05(日) 12:01:31.09言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0917デフォルトの名無しさん
2011/06/05(日) 13:10:36.24どのプログラム言語でも最終的には機械語に変換されるんだから、別にどんな言語でも書けそうなんだが
OSを開発するに当たって、C言語でなければならない理由を教えてくれ
0918デフォルトの名無しさん
2011/06/05(日) 13:16:37.430919デフォルトの名無しさん
2011/06/05(日) 13:25:42.370920デフォルトの名無しさん
2011/06/05(日) 13:30:10.15つまり、慣例によりCで書かれるだけで、別に他の言語でも書けるってこと?
0921デフォルトの名無しさん
2011/06/05(日) 13:52:14.240922デフォルトの名無しさん
2011/06/05(日) 13:54:30.500923デフォルトの名無しさん
2011/06/05(日) 13:56:19.47それに型を付けてC言語ができたんじゃなかったけな
C以外の言語だと、c++やjavaでOSが書かれたこともあった気がする
MS-DOSをc++で書いたらとんでもないバイト数になったってジョークもあった
別の言語を作り出したりするのは、既存の資源を廃棄することになるから、
今後も、cが使われていくことになると思うけどな
うん百頁の企画書やSystemCなんかの規格だったり、
言語やライブラリのデバッグに多くのリソースが使われている
既在の環境でそれなりに快適に生活している人が居る以上は、
新しい何かが出来ても移住しないんだよunix書いた人たちがplan9を書いたけども、
結局のとこ流行らなかったって歴史だってある
つまるところ、慣例というよりも、他に選択肢がない
0924デフォルトの名無しさん
2011/06/05(日) 13:59:51.04すでにC言語以外で書かれたOSは有るよ
0925デフォルトの名無しさん
2011/06/05(日) 14:02:38.430926デフォルトの名無しさん
2011/06/05(日) 14:41:35.17JavaとかC++でしょ?
両方とも、文法や形式がC言語にかなり近いじゃん
0927デフォルトの名無しさん
2011/06/05(日) 15:09:03.66Cはハードウェアへの直接アクセスが簡単なんだ。
他の言語でもライブラリとか使ってアクセスすることもできるけど、Cほど直接的じゃない。
書ける/書けないでいえば他の言語でも書けるけど、Cより楽にかける言語は知らない。
0928デフォルトの名無しさん
2011/06/05(日) 15:10:49.64バイナリに変換されたら表現記法など意味がない
言語が異なれば言語の構文が似てようがまったく別物
近い遠いというのは人間の主観でしかない
0929デフォルトの名無しさん
2011/06/05(日) 16:20:54.70バイナリが近いわけねーだろJK
0930デフォルトの名無しさん
2011/06/05(日) 18:27:11.51#include <cstdio>
int main()
{
std::printf("Hello world.\n");
return 0;
}
と、Cの
#include <stdio.h>
int main()
{
printf("Hello world.\n");
return 0;
}
で、近くないコードが出力され得るとでも?
0931デフォルトの名無しさん
2011/06/05(日) 18:46:45.08詭弁のガイドラインにジャストミートだなw
0932デフォルトの名無しさん
2011/06/05(日) 19:09:54.37std::cout 使ってみ?
0933デフォルトの名無しさん
2011/06/05(日) 19:12:07.02似てようが似てまいが違いはないと思うがね
だからOSが手続き型で書かれる理由にはならない
0934デフォルトの名無しさん
2011/06/05(日) 19:22:29.400935デフォルトの名無しさん
2011/06/05(日) 19:27:08.52宣言型も手続き型も同じなのに、
手続き型の方が抽象度が低いと認識されてるのは
ハードウェア制御との親和性が高いからでは?
0936デフォルトの名無しさん
2011/06/05(日) 21:42:37.58クラスや継承なんてつかったら、vtblなんかのポインタで無駄なメモリを食うだろし
組込み用途につかうもんじゃねーだろ
何がチューリング完全だよ。どこの厨二だ
0937デフォルトの名無しさん
2011/06/05(日) 22:32:28.24低学歴には難しすぎたね、ごめん。
0938デフォルトの名無しさん
2011/06/05(日) 22:50:22.62OOPなんて只の手続き型の一種
0939デフォルトの名無しさん
2011/06/05(日) 22:50:23.510940デフォルトの名無しさん
2011/06/05(日) 22:51:42.040941デフォルトの名無しさん
2011/06/05(日) 22:57:21.31http://programatica.cs.pdx.edu/House/
0942デフォルトの名無しさん
2011/06/05(日) 23:09:12.560943デフォルトの名無しさん
2011/06/06(月) 01:34:12.52それに、宣言形言語(というか関数型言語・論理型言語)は、計算理論・計算可能性理論・記号論理の再帰理論等の実装といってもいいから。
0944デフォルトの名無しさん
2011/06/06(月) 11:28:40.55ある数値の次の限りなく小さな次の差分
ulp(Units in the Last Place)を求める関数はありますか?
javaでいうところのMath.ulp(float)です;
0945デフォルトの名無しさん
2011/06/06(月) 12:34:39.880946デフォルトの名無しさん
2011/06/06(月) 12:36:31.43LDBL_EPSILONという定数が定義されており、それぞれfloat型、
double型、long double型の計算機イプシロンの値となっている。
0947デフォルトの名無しさん
2011/06/06(月) 13:00:57.96cmathのnextafterf
もしくは直接の比較として
boost::math::float_distance
0948デフォルトの名無しさん
2011/06/06(月) 13:06:38.170949デフォルトの名無しさん
2011/06/06(月) 13:09:52.24内部表現って知ってる?
ttp://codepad.org/yh9cjksS
0950デフォルトの名無しさん
2011/06/06(月) 22:21:56.18どうでしょうか
0951デフォルトの名無しさん
2011/06/06(月) 22:23:02.37そんなことするぐらいならスマートポインタ使えばよくね?w
0952デフォルトの名無しさん
2011/06/06(月) 22:25:18.25そうなんですけど生ポインタのほうがシンプルですので、、、
0953デフォルトの名無しさん
2011/06/06(月) 22:56:42.840954デフォルトの名無しさん
2011/06/06(月) 23:59:14.17まあ慣れもあるのかもしれないけど
0955デフォルトの名無しさん
2011/06/07(火) 07:58:10.110956デフォルトの名無しさん
2011/06/07(火) 08:51:45.340957デフォルトの名無しさん
2011/06/07(火) 10:58:29.27C++で構造体やクラスの同名変数のみを自動でコピーするような処理は可能でしょうか?
若干条件付きでも構いませんが、順序はバラバラ(memcpyナシ)でお願いします。
struct A {
int x, y, z;
}
struct B {
int a, x, y;
}
A a;
B b;
autoCopy(a, b); // ← x, yのみコピーされる感じ
0958デフォルトの名無しさん
2011/06/07(火) 11:44:39.630959デフォルトの名無しさん
2011/06/07(火) 12:04:26.97template<class A, class B>void autoCopy(A & a, const B & b) {a.x = b.x; a.y = b.y;}
0960デフォルトの名無しさん
2011/06/07(火) 12:14:16.38同名のメンバー名のリストは与えられないという条件に決まってんだろ。ちっとは頭使え。
0961デフォルトの名無しさん
2011/06/07(火) 12:21:38.940962デフォルトの名無しさん
2011/06/07(火) 12:51:07.87それだったら既に>958で答が出ている。
敢えて次善策を提示しているに決まっているだろう。
ちっとはその身体の上に乗っかってる代物を有効活用したらどうだ?
0963デフォルトの名無しさん
2011/06/07(火) 12:58:05.25設計が間違ってるからそんな欲求が生まれる
0964デフォルトの名無しさん
2011/06/07(火) 13:01:35.72まとめて一回でコピーできる
0966デフォルトの名無しさん
2011/06/07(火) 14:32:10.200967デフォルトの名無しさん
2011/06/07(火) 14:35:44.11どうしても一部のメンバ変数のみを送受信したくなると思うのですが、
設計ミスですかそうしたか。
0968デフォルトの名無しさん
2011/06/07(火) 14:44:42.830969デフォルトの名無しさん
2011/06/07(火) 17:28:13.32ヘッダ見ろカス
0970デフォルトの名無しさん
2011/06/07(火) 23:00:51.94www-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)に一致してしまいます。
なぜこんな事になるのでしょうか?
0971デフォルトの名無しさん
2011/06/07(火) 23:50:31.75WM_KEYDOWN等は仮想キーコード。
VK_???は仮想キーコード。
なので、
case WM_CHAR:
if(wParam == 'A') {
...
とすれば拾えるハズ
0972970
2011/06/08(水) 02:01:02.82ご助言を元にいじって、仮想キーを != WM_CHAR で取得する事で解決できました。
勉強になりました。ありがとうございます。
0973デフォルトの名無しさん
2011/06/08(水) 11:59:43.70{
assert(n>0);
if(!(n>0)) throw func_error(n) ;
//・・・
};
アサーションって運が悪いとデバッグ時に気がつかないかもしれないから(例えばfunc(rand())みたいな場合)
上のようにリリース時のチェックも追加したほうがいいと思うんだが、なぜみんな書かないの?
0975デフォルトの名無しさん
2011/06/08(水) 12:04:08.480976デフォルトの名無しさん
2011/06/08(水) 12:26:58.450977デフォルトの名無しさん
2011/06/08(水) 12:30:07.190978デフォルトの名無しさん
2011/06/08(水) 13:30:00.24変数自体は進法は関係がない。
表示などの目的で16進数に変換したいなら、printf()系で変換するのが手っ取り早い。
0980デフォルトの名無しさん
2011/06/08(水) 14:14:44.98解答ありがとうございます。
表示目的ではないのですが、sprintfやstringstreamなどで試してみてもZZ型が
16進文字列になりませんでした。
0981デフォルトの名無しさん
2011/06/08(水) 14:18:25.27NTLにZZ型を扱う文字列関数(printfやitoa相当のもの)がないなら自分で書くしかない
0982デフォルトの名無しさん
2011/06/08(水) 14:21:50.77やっぱり自分で書くのが一番なんですかね。ありがとうございました。
参考になりました。
0983デフォルトの名無しさん
2011/06/08(水) 14:24:18.69long n = (long)(zz % 16);
s = a[n] + s;
0984デフォルトの名無しさん
2011/06/08(水) 14:34:02.59ってありますか?
0985デフォルトの名無しさん
2011/06/08(水) 14:40:42.61http://d.hatena.ne.jp/ihiroky/20101122/1290409915
0986デフォルトの名無しさん
2011/06/08(水) 15:17:13.53マジすか。 標準Cライブラリも案外だらしないな・・・
しかたない。 /procの下でも読みます。
そもそも標準ライブラリはディスクリプタを扱わない。
∵そう言う方法で管理しないシステムで使うことも考慮されているから。
0988デフォルトの名無しさん
2011/06/08(水) 17:21:48.39あーそういえばそうだったね
低レベルばっかり触ってるからうっかりしてた
0989デフォルトの名無しさん
2011/06/08(水) 19:18:04.28ただしかなりファイルが大きいので一部のために全部書き換えることはしたくない
固定長のデータ等扱うのに需要はあると思うけど
どれ使っていいかわからない
0990デフォルトの名無しさん
2011/06/08(水) 19:19:43.010991デフォルトの名無しさん
2011/06/08(水) 19:46:47.330992デフォルトの名無しさん
2011/06/08(水) 19:48:16.87"r+"でfopen 〜 fseek 〜 fwriteやfprintfで書き込み
fstream 〜 seekp 〜 write や << で書き込み
0993デフォルトの名無しさん
2011/06/08(水) 20:05:38.45はずかしいね
0994デフォルトの名無しさん
2011/06/08(水) 22:03:41.24言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
0995デフォルトの名無しさん
2011/06/09(木) 00:20:38.270996デフォルトの名無しさん
2011/06/09(木) 13:21:49.04♪ ∧__∧. 。∧__∧ .Π∧__∧♪ ο∧__∧ ∧__∧∩))
Ο´・ω・`) .│´・ω・`) ┃´・ω・`) │´・ω・`) ρ・ω・`)|
(つ .│ (つ │ ((つ > (つ │ (つ ./
♪ │ U (_))) .U (_))) .│♪(_))) U (_))..〈
((__ノ^(___)) (((_)♪ (((_) (((_) ((_)♪
おいしい ハオチー ボーノ アロイ デリシャス デリシュ〜
0997デフォルトの名無しさん
2011/06/09(木) 17:20:16.54これで自作のswapが呼ばれないのはなぜ?
0998デフォルトの名無しさん
2011/06/09(木) 17:24:44.62std名前空間に入れていい物って限られてなかったか?
0999デフォルトの名無しさん
2011/06/09(木) 17:25:30.37言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
1000デフォルトの名無しさん
2011/06/09(木) 17:53:26.58sortがswap利用してないからじゃね?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。