1 :デフォルトの名無しさん2010/12/06(月) 02:47:43
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ
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/
過去ログ
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/
2 :デフォルトの名無しさん2010/12/06(月) 03:12:01
コマンドプロントでコンパイルをしようと思ってもできません。
学校ではcl ファイル名.cと教えてもらって、実際できたんですけど、家のパソコンではできないみたいです。
どうすればコンパイルできるんでしょうか。。
学校ではcl ファイル名.cと教えてもらって、実際できたんですけど、家のパソコンではできないみたいです。
どうすればコンパイルできるんでしょうか。。
3 :デフォルトの名無しさん2010/12/06(月) 03:13:12
gcc 4.2.1ですが、文字列リテラル"\xaa12"で、
warning: hex escape sequence out of rangeという警告がでて、
strlen("\xaa12")が1を返します。期待値は3です。
12を16進数字ではなく文字として認識させるにはどうすればいいでしょう?
warning: hex escape sequence out of rangeという警告がでて、
strlen("\xaa12")が1を返します。期待値は3です。
12を16進数字ではなく文字として認識させるにはどうすればいいでしょう?
4 :デフォルトの名無しさん 2010/12/06(月) 03:34:09
>>3
質問の意味がよくわからんけど
"\xaa12"は43538となる
質問の意味がよくわからんけど
"\xaa12"は43538となる
5 :デフォルトの名無しさん2010/12/06(月) 05:42:01
>>3
strlen("\xaa"/*オマンコ*/"12")
strlen("\xaa"/*オマンコ*/"12")
6 :デフォルトの名無しさん2010/12/06(月) 09:18:30
>>5
なるほど。
なるほど。
7 :デフォルトの名無しさん2010/12/06(月) 13:32:59
++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;
よりiterator+=9の方が速く出来ればこのiteratorはランダムイテレーターにしていいですか?
それともO(1)じゃないとだめですか?
よりiterator+=9の方が速く出来ればこのiteratorはランダムイテレーターにしていいですか?
それともO(1)じゃないとだめですか?
8 :デフォルトの名無しさん2010/12/06(月) 13:40:03
>>7
ISO/IEC §24.2 Table 76 Random access iterator requirements を読め
ISO/IEC §24.2 Table 76 Random access iterator requirements を読め
10 :デフォルトの名無しさん2010/12/06(月) 13:44:02
すみません、英語読めないので変わりに読んで教えてください。
13 :デフォルトの名無しさん2010/12/06(月) 14:04:56
しばらくお待ち下さいからすすまないから閉じたけど
ようするに定数時間なのはSTLのランダムイテレーターがということで
自作のイテレーターは勝手にしろということですか?
ようするに定数時間なのはSTLのランダムイテレーターがということで
自作のイテレーターは勝手にしろということですか?
14 :デフォルトの名無しさん2010/12/08(水) 18:26:46
インテルコンパイラ評価版でincludeがうまくいきません。
foo.cpp から、同一ディレクトリにある bar.h をincludeしたいのですが
foo.cpp の #include "bar.h" の行で
致命的なエラー: ソース ファイル "bar.h" を開けません。
と出てコンパイルが通りません。
gccでもvc++でもコンパイル通ります。
何がいけないんでしょうか?
foo.cpp から、同一ディレクトリにある bar.h をincludeしたいのですが
foo.cpp の #include "bar.h" の行で
致命的なエラー: ソース ファイル "bar.h" を開けません。
と出てコンパイルが通りません。
gccでもvc++でもコンパイル通ります。
何がいけないんでしょうか?
15 :デフォルトの名無しさん2010/12/09(木) 09:45:04
整数のサイズとか気にしなければいけない場合ってプリプロセッサで調べて駄目だったらエラーを出すの?
16 :デフォルトの名無しさん2010/12/09(木) 12:44:57
望むサイズの型を使うだけ
処理系依存しないものなんて書かないので
処理系依存しないものなんて書かないので
17 :デフォルトの名無しさん2010/12/12(日) 14:12:06
メンバ変数にスマートポインタを使う事は、愚かなことですか?
18 :デフォルトの名無しさん2010/12/12(日) 15:00:34
はい
19 :デフォルトの名無しさん2010/12/12(日) 22:23:12
>>18
なんで?
なんで?
21 :デフォルトの名無しさん2010/12/12(日) 22:46:51
説明できるような理由はないのか。
じゃつかっていいってことか。
じゃつかっていいってことか。
22 :デフォルトの名無しさん2010/12/13(月) 00:17:42
スマートポインタはただのポインタに比べ無駄が多いので
明確な理由無く使うことは愚かであるといえます
明確な理由無く使うことは愚かであるといえます
23 :デフォルトの名無しさん2010/12/13(月) 00:33:56
生産性は何よりも優先せねばならない
ばんばん使いなさい
ばんばん使いなさい
24 :デフォルトの名無しさん2010/12/13(月) 00:37:55
メンバーにスマポを使って生産性が上がるかどうかは疑問だ
コンパイル速度の問題もあらわれるから場合によってはマイナスにもなりかねない
コンパイル速度の問題もあらわれるから場合によってはマイナスにもなりかねない
25 :デフォルトの名無しさん2010/12/13(月) 14:30:13
C++の配列のループをやるにはint i=0をつかうより
イテレーターみたいに配列を++するのが本式じゃないですか?
イテレーターみたいに配列を++するのが本式じゃないですか?
27 :デフォルトの名無しさん2010/12/13(月) 15:36:56
>>25
配列はインクリメントできません。
従って、インデックスを使うかイテレータを使うのが一般的です。
配列はインクリメントできません。
従って、インデックスを使うかイテレータを使うのが一般的です。
26 :デフォルトの名無しさん2010/12/13(月) 15:28:31
配列を++なんてできない。配列は変数ではない。定数。
ポインタか?
どっちでもいいよ。結局たいした違いはない。
ポインタか?
どっちでもいいよ。結局たいした違いはない。
28 :デフォルトの名無しさん2010/12/13(月) 15:45:44
標準ライブラリーの翻訳単位の静的なローカルでないオブジェクトが初期化されていることは
保証されてないんですか?
保証されてないんですか?
37 :デフォルトの名無しさん2010/12/14(火) 14:28:17
>>28をそろそろお願いします。
coutとかの話です。
coutとかの話です。
38 :デフォルトの名無しさん2010/12/14(火) 15:08:20
>>37
お前は他人に質問する前にまず日本語を覚えろ
お前は他人に質問する前にまず日本語を覚えろ
31 :デフォルトの名無しさん2010/12/13(月) 20:52:20
課題わかんないのでたすけてくれ
(0)標準入力からファイル名を読み込む.
(1)ファイルから文字列を1行だけ読込み,標準出力に印字する.
(2)関数tokeizer により1行の文字列をトークンと呼ぶ単語に分解する.
(3)tokeizer の結果を表示する.
(4)関数setTokens により,各トークンを分類し,その種別と値を設定する.
(5)setTokens の結果を表示する.
の関数settokenができない、
void setTokens(token token[],int nt, KeyWD k[], int KeyWDlen)
トークンtoken[]にデータ種別(type)と値(value)を設定する
nt=トークン個数, KWDT=キーワード定義表,KeyWDlen=KWDT の長さ(キーワードの数)
戻り値 なし
トークン種別 type value
未定義 TKNUNDEF 未定義
キーワード TKNKWD キーワードの識別子
整数 TKNINT 整数値
ラベル TKNLBL ラベルの文字数
がよくわからんのだが・・・・ぼすけて
(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 ラベルの文字数
がよくわからんのだが・・・・ぼすけて
33 :デフォルトの名無しさん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++のどういう
機能名で調べたら良いかで困っています。よろしくお願い致します。
#include <stdio.h>
enum AAA
{
A = 10,
B = 11,
C = 12
};
int main()
{
printf("%d\n", AAA(10));
return 0;
}
これをg++でコンパイルして実行するとちゃんと10と出力されます。
enum で宣言した AAA に対して、AAA(10)が10を返すという使い方は
C++の文法では可能なのでしょうか? 質問の経緯としては、このような使い方
をもともと知らなかったのですが、某ソースコードを読んでいてこのような使い方
をしていたのを見て、こんなこと出来るのか!と思ったんですが、C++のどういう
機能名で調べたら良いかで困っています。よろしくお願い致します。
34 :デフォルトの名無しさん2010/12/13(月) 23:49:40
キャストでは?
35 :332010/12/13(月) 23:58:24
>>34
これキャストなんですね… (AAA)10 ってことですね。
どうもありがとうございました。
これキャストなんですね… (AAA)10 ってことですね。
どうもありがとうございました。
40 :デフォルトの名無しさん2010/12/14(火) 16:49:06
自前のハンドル型を用意したい場合、
typedef int SomeHandle;
とすると
SomeHandle h = 0;
h++;
とインクリメントできてしまいますが、これを防ぐ方法はどうすればいいですか?
typedef int SomeHandle;
とすると
SomeHandle h = 0;
h++;
とインクリメントできてしまいますが、これを防ぐ方法はどうすればいいですか?
47 :デフォルトの名無しさん2010/12/15(水) 14:25:11
そういうのってやったことないけど
確認とかあるから実際はフォーマットされないんじゃないの?
確認とかあるから実際はフォーマットされないんじゃないの?
50 :デフォルトの名無しさん2010/12/15(水) 18:37:46
未定義です
51 :デフォルトの名無しさん2010/12/15(水) 19:22:19
>>50
ありがとうございます
ありがとうございます
52 :デフォルトの名無しさん2010/12/17(金) 03:21:20
templateに関して質問です。
ある定数nがあるとき,その数だけ値のtemplateを持つ関数を呼び出したいです。
つまり,
template <int n> void hoge();
とあったとき,
hoge<0>();
hoge<1>();
...
hofe<n-1>();
といった感じで呼び出したいです。
for文を使うとtemplateの部分の値が変数になってしまうのでエラーが出てしまいます。
何かうまい方法はないでしょうか?
ある定数nがあるとき,その数だけ値のtemplateを持つ関数を呼び出したいです。
つまり,
template <int n> void hoge();
とあったとき,
hoge<0>();
hoge<1>();
...
hofe<n-1>();
といった感じで呼び出したいです。
for文を使うとtemplateの部分の値が変数になってしまうのでエラーが出てしまいます。
何かうまい方法はないでしょうか?
60 :デフォルトの名無しさん2010/12/17(金) 20:10:37
>>52のtemplate<X>hoge()の中身見てみたいなw
53 :デフォルトの名無しさん2010/12/17(金) 16:24:45
template <int n> void hoge() {
hoge<n - 1>();
std::cout << n - 1 << std::endl;
}
template <> void hoge<1>() {
std::cout << 0 << std::endl;
}
hoge<n - 1>();
std::cout << n - 1 << std::endl;
}
template <> void hoge<1>() {
std::cout << 0 << std::endl;
}
61 :デフォルトの名無しさん2010/12/17(金) 21:53:08
>>53
ありがとうございます!うまくいきました。
hogeの中身は, ある処理をn回繰り返して行う関数です。
アンロールの効果を確かめたくてtemplateを使って定数化しました。
ありがとうございます!うまくいきました。
hogeの中身は, ある処理をn回繰り返して行う関数です。
アンロールの効果を確かめたくてtemplateを使って定数化しました。
57 :デフォルトの名無しさん2010/12/17(金) 18:59:02
減らすもなにも、コンパイル時に解決するからコストなんて残らないだろ。
62 :デフォルトの名無しさん2010/12/18(土) 11:13:58
C++を0の状態から勉強している者です。
「ロベール読め」
って事でロベールの入門講座を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば勿論動きます)
http://codepad.org/0i4ByGfl
が自分の書いたソースです。
私はVC++2010を使用しているのですが、
ロベールは2008を前提として書いてるようで、そこら辺の違いもあるのでしょうか?
「ロベール読め」
って事でロベールの入門講座を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば勿論動きます)
http://codepad.org/0i4ByGfl
が自分の書いたソースです。
私はVC++2010を使用しているのですが、
ロベールは2008を前提として書いてるようで、そこら辺の違いもあるのでしょうか?
64 :デフォルトの名無しさん2010/12/18(土) 16:00:23
ウィンドウを中央に表示したいのだが、ソースコードがわかりません。
68 :デフォルトの名無しさん2010/12/18(土) 17:01:43
>>64
GetSystemMetrics(SM_CXSCREEN)
でデスクトップのサイズを聞いて、適当にあわせればいい
GetSystemMetrics(SM_CXSCREEN)
でデスクトップのサイズを聞いて、適当にあわせればいい
73 :デフォルトの名無しさん2010/12/18(土) 21:41:06
では募集を再開しますので>>64の解答をよろしくお願いします
74 :デフォルトの名無しさん2010/12/18(土) 21:55:12
65 :デフォルトの名無しさん2010/12/18(土) 16:03:24
#include <stdgui>
int main(void) {
std::window w;
w.move(std::center);
return 0;
}
int main(void) {
std::window w;
w.move(std::center);
return 0;
}
66 :642010/12/18(土) 16:28:30
>>65
氏ね
氏ね
70 :642010/12/18(土) 19:16:50
>>66は自分じゃありませんので・・・
>>65
回答ありがとうございます
結果
include ファイルを開けません。'stdgui': No such file or directory
と出てきたのですが解決方法が不明です。
またの回答お願いします。
>>65
回答ありがとうございます
結果
include ファイルを開けません。'stdgui': No such file or directory
と出てきたのですが解決方法が不明です。
またの回答お願いします。
71 :デフォルトの名無しさん2010/12/18(土) 21:19:27
>>70
偽者氏ね
偽者氏ね
75 :デフォルトの名無しさん2010/12/19(日) 08:28:42
バカっぽいからh抜くな。
76 :デフォルトの名無しさん2010/12/19(日) 08:31:51
>>75
バーカバーカ^^
バーカバーカ^^
94 :デフォルトの名無しさん2010/12/27(月) 09:35:05
>>75
先頭のhを抜くなんて2ちゃん設立当初から普通に使われているが???
あぁなんだ、ネット初心者か。
先頭のhを抜くなんて2ちゃん設立当初から普通に使われているが???
あぁなんだ、ネット初心者か。
95 :デフォルトの名無しさん2010/12/27(月) 10:25:28
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www
意味もわからずにh抜いてたんだね。素人丸出し。www
97 :こいつこそがh抜きについて無知2010/12/27(月) 19:54:33
95 名前:デフォルトの名無しさん[] 投稿日:2010/12/27(月) 10:25:28
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www
99 :デフォルトの名無しさん2010/12/27(月) 20:04:23
>>75 >>95 や今さらとか言っている奴は
専用ブラウザの仕組みやそれがなかった時代を知らない無知
その時代から習慣になっているから、今さらh抜きに反応する方がアホ
専用ブラウザの仕組みやそれがなかった時代を知らない無知
その時代から習慣になっているから、今さらh抜きに反応する方がアホ
103 :デフォルトの名無しさん2010/12/27(月) 20:44:42
>>99
h抜きを始めた張本人に向かって無知だとか… 何たる無知。ww
バカっぽいからやめた方が良いよ。
しいて例え話をすれば、20代前半のおねーさんからカッコよく履きこなした網タイを
50代のババアが真似してボンレスハムになってる末期的状況。
h抜きを始めた張本人に向かって無知だとか… 何たる無知。ww
バカっぽいからやめた方が良いよ。
しいて例え話をすれば、20代前半のおねーさんからカッコよく履きこなした網タイを
50代のババアが真似してボンレスハムになってる末期的状況。
79 :デフォルトの名無しさん2010/12/25(土) 21:23:20
クラスメンバの名前を
class Hoge { int _x; } ;
みたいに_ではじめるのは規格的にありなんですか?
class Hoge { int _x; } ;
みたいに_ではじめるのは規格的にありなんですか?
81 :デフォルトの名無しさん2010/12/25(土) 23:12:33
>>79
CとC++では若干異なるが原則としてアンダースコアで識別子を始めるのは良くない
ISO/IEC9899:1999
§7.1.3 Reserved identifiers
? All identifiers that begin with an underscore and either an uppercase letter or another
underscore are always reserved for any use.
ISO/IEC 14882:2003
§17.4.3.1.2
? Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.
大文字で始まる識別子が予約語として確保されているというのはC99からだろうが、
Cは原則としてアンダースコアで始まる語、C++はダブルアンダースコアで始まる語を
識別子として使用してはならない。
CとC++では若干異なるが原則としてアンダースコアで識別子を始めるのは良くない
ISO/IEC9899:1999
§7.1.3 Reserved identifiers
? All identifiers that begin with an underscore and either an uppercase letter or another
underscore are always reserved for any use.
ISO/IEC 14882:2003
§17.4.3.1.2
? Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.
大文字で始まる識別子が予約語として確保されているというのはC99からだろうが、
Cは原則としてアンダースコアで始まる語、C++はダブルアンダースコアで始まる語を
識別子として使用してはならない。
85 :デフォルトの名無しさん2010/12/26(日) 00:08:09
>>81
C++でもシングルアンダースコアで始めちゃだめだね
(begins with an underscore followed by an uppercase letter)
要するにシステム用に予約されているから使うなって事でしょう
どうしてもアンダースコアを使いたいなら大抵予約語の最後に付ける
ケースがよく見られる
C++でもシングルアンダースコアで始めちゃだめだね
(begins with an underscore followed by an uppercase letter)
要するにシステム用に予約されているから使うなって事でしょう
どうしてもアンダースコアを使いたいなら大抵予約語の最後に付ける
ケースがよく見られる
82 :デフォルトの名無しさん2010/12/25(土) 23:49:58
トンクス
C99は糞だな
大文字からだめって後方互換性無視しまくりじゃんw
C99は糞だな
大文字からだめって後方互換性無視しまくりじゃんw
83 :デフォルトの名無しさん2010/12/25(土) 23:57:01
些末な所だから互換性を捨てたんだろう
C++だってCと互換性ない所結構あるんだぜ
C++だってCと互換性ない所結構あるんだぜ
84 :デフォルトの名無しさん2010/12/26(日) 00:07:18
C99もC++同様アンダースコアに続く大文字がだめなだけで大文字始まりは問題ない
ダブルアンダースコアは最初以外でもだめ
クラスメンバのようにグローバルじゃないやつはアンダースコア+小文字もOK
ちゃんと読めよ
ダブルアンダースコアは最初以外でもだめ
クラスメンバのようにグローバルじゃないやつはアンダースコア+小文字もOK
ちゃんと読めよ
86 :デフォルトの名無しさん2010/12/26(日) 00:16:41
>>84
確かにそうだね
JIS X3010(C99)
§7.1.3
-下線に続き大文字1文字又は下線に続きもう一つの下線で始まるすべての識別子は、
いかなる使用に対しても常に予約済みとする。
JIS X3014(C++03)
§17.4.3.1.2
-2個の下線を含む名前、又は一個の下線で始まりその後に大文字が続く名前は、
いかなる使用も、処理系用に予約される。
-下線で始まる名前は、大域的名前空間における名前として、処理系用に予約する。
本当に微妙な違いだが、要するにC++では大域的使用でなければアンダースコアに小文字が
続く場合はOKって事か
確かにそうだね
JIS X3010(C99)
§7.1.3
-下線に続き大文字1文字又は下線に続きもう一つの下線で始まるすべての識別子は、
いかなる使用に対しても常に予約済みとする。
JIS X3014(C++03)
§17.4.3.1.2
-2個の下線を含む名前、又は一個の下線で始まりその後に大文字が続く名前は、
いかなる使用も、処理系用に予約される。
-下線で始まる名前は、大域的名前空間における名前として、処理系用に予約する。
本当に微妙な違いだが、要するにC++では大域的使用でなければアンダースコアに小文字が
続く場合はOKって事か
88 :デフォルトの名無しさん2010/12/26(日) 00:41:20
>>87
>>86の2個目の文の英語
? Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.
つまりC++もnamespaceで囲まれてない限りアンダースコアで始まる識別子はダメ
>>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で囲まれてない限りアンダースコアで始まる識別子はダメ
87 :デフォルトの名無しさん2010/12/26(日) 00:18:15
ん?よく考えるとnamespaceに囲まれてなければ、アンダースコア+小文字の識別子も
C++は駄目って事じゃないのか?それが例えclassの中にあってもだ
C++は駄目って事じゃないのか?それが例えclassの中にあってもだ
89 :デフォルトの名無しさん2010/12/26(日) 00:56:03
MSDNのメソッドシグネチャーで
DWORD *
もあれば
LPDWORD
もあるけど、同じだよね?
DWORD *
もあれば
LPDWORD
もあるけど、同じだよね?
91 :デフォルトの名無しさん2010/12/26(日) 03:30:46
>>89
16bit環境だと同じでない場合がある。
16bit環境だと同じでない場合がある。
90 :デフォルトの名無しさん2010/12/26(日) 01:08:11
LPはロングポインタを示すハンガリアン記法
windows.h以下のどこかでtypedef DWORD*されてるハズ
windows.h以下のどこかでtypedef DWORD*されてるハズ
92 :デフォルトの名無しさん2010/12/26(日) 21:56:05
VC++のSTLってほとんどのクラスで_Hogeみたいな名前でメンバ関数実装してhogeみたいな名前でラップしてるけど
これいちいちラップする理由はなんですか?無駄じゃないですか?
これいちいちラップする理由はなんですか?無駄じゃないですか?
104 :デフォルトの名無しさん2010/12/27(月) 22:04:43
>>92
ラップすると、昔の実装を残したまま、実装を新しくすることができる。
互換性のために昔の実装も残したいときもある。
ラップすると、昔の実装を残したまま、実装を新しくすることができる。
互換性のために昔の実装も残したいときもある。
106 :デフォルトの名無しさん2010/12/27(月) 23:06:52
>>104
STLではそんなの残さないと思うけど
STLではそんなの残さないと思うけど
93 :デフォルトの名無しさん2010/12/27(月) 00:02:53
処理を共通化して複数のメンバ関数から呼んでるんじゃない?
知らないけど
名前が _大文字 で始まってるのは、処理系の予約語になるから
知らないけど
名前が _大文字 で始まってるのは、処理系の予約語になるから
96 :デフォルトの名無しさん2010/12/27(月) 12:01:45
なんで参照の差し替え禁止にしたんだろう
基本差し替え可能で差し替え禁止にしたければHoge & constでいいじゃん
基本差し替え可能で差し替え禁止にしたければHoge & constでいいじゃん
98 :デフォルトの名無しさん2010/12/27(月) 19:57:10
75 名前:デフォルトの名無しさん[] 投稿日:2010/12/19(日) 08:28:42
バカっぽいからh抜くな。
バカっぽいからh抜くな。
100 :デフォルトの名無しさん2010/12/27(月) 20:09:53
http://ja.wikipedia.org/wiki/H%E6%8A%9C%E3%81%8D
http://japan.wikia.com/wiki/H%E6%8A%9C%E3%81%8D
本当にh抜きについてついて無知がいるようなので、簡単に説明している
まとめサイトを参照しておくぞ。2ちゃん設立当初から利用している
自分に向かって無知とか、事情を知らない知ったかがうぜぇ。
http://japan.wikia.com/wiki/H%E6%8A%9C%E3%81%8D
本当にh抜きについてついて無知がいるようなので、簡単に説明している
まとめサイトを参照しておくぞ。2ちゃん設立当初から利用している
自分に向かって無知とか、事情を知らない知ったかがうぜぇ。
101 :デフォルトの名無しさん2010/12/27(月) 20:23:03
名残についてバカっぽいとか言う奴は
ソースでも昔の名残や特に意味を成さないスタイルを
知ったかぶって否定しているんだろうね
その癖、自分は必要最低限のことが出来ていないんだぜ
ソースでも昔の名残や特に意味を成さないスタイルを
知ったかぶって否定しているんだろうね
その癖、自分は必要最低限のことが出来ていないんだぜ
105 :デフォルトの名無しさん2010/12/27(月) 22:56:04
const と ポインタについて質問です。
class CLASS が宣言してある場合に
CLASS *A;
const CLASS *B;
B = A;
は通るのですが
CLASS **A;
const CLASS **B;
B = A;
にした場合、型変換ができないらしくエラーが出てしまいます。
使用目的はAにnew CLASS*[]を代入し、その中にさらにCLASSの派生をnewした後
別の関数に、読み込み専用のポインタを渡してそちらでも処理をする、という形なのですが…
この場合、どういったように書けばいいのでしょうか?
class CLASS が宣言してある場合に
CLASS *A;
const CLASS *B;
B = A;
は通るのですが
CLASS **A;
const CLASS **B;
B = A;
にした場合、型変換ができないらしくエラーが出てしまいます。
使用目的はAにnew CLASS*[]を代入し、その中にさらにCLASSの派生をnewした後
別の関数に、読み込み専用のポインタを渡してそちらでも処理をする、という形なのですが…
この場合、どういったように書けばいいのでしょうか?
107 :デフォルトの名無しさん2010/12/27(月) 23:07:55
>>105
const CLASS* const* B = A; じゃだめかい?
const CLASS* const* B = A; じゃだめかい?
110 :デフォルトの名無しさん2010/12/27(月) 23:16:10
>>107
ありがとうございます。 うまく通りました。
この書き方は初めて知りました。 **の間にconst書く書き方もあるんですね…
ありがとうございます。 うまく通りました。
この書き方は初めて知りました。 **の間にconst書く書き方もあるんですね…
112 :デフォルトの名無しさん2010/12/28(火) 00:29:52
>>110
こういう事らしい
// Here's a constant integer. It must never be changed.
const int should_not_change;
// Here is an evil pointer.
int *ptr = 0;
int **evil = &ptr;
// Let's assume that this conversion is legal.
const int **good = evil;
// This assignment is legal.
*good = &should_not_change;
// However, this will actually change 'should_not_change'
**evil = 10;
Hence, the conversion is illegal.
つまり書き換えが出来てはいけないconst型のオブジェクトをポインタ経由で書き換えられる
穴が出来てしまうために、T ** から const T **への変換を禁止したらしい
ちなみにCでは警告が出ますがコンパイルが通ってしまう
こういう事らしい
// 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では警告が出ますがコンパイルが通ってしまう
108 :デフォルトの名無しさん2010/12/27(月) 23:09:20
particle_type( const int x0 = 0, const int y0 = 0, const double weight0 = 0.0 ) : x( x0 ), y( y0 ), weight( weight0 )
{
}
たまにこんなの見るけど、この:の後ろのはどういう意味なの?
{
}
たまにこんなの見るけど、この:の後ろのはどういう意味なの?
109 :デフォルトの名無しさん2010/12/27(月) 23:13:32
メンバ初期化子でググれ
114 :デフォルトの名無しさん2010/12/28(火) 00:53:11
>>109
ありがとう初めて知った
ありがとう初めて知った
111 :デフォルトの名無しさん2010/12/27(月) 23:37:50
下らないことで他人より知識があることが誇りなんですね
そういう小物、2ちゃん以外でも普通に見かけるが
逆に自分がそれを知らなかった時に指摘された事が
よっぽど悔しかったんですね。指摘した奴が適切な
知識を持っているとも限らないのに。
そういう小物、2ちゃん以外でも普通に見かけるが
逆に自分がそれを知らなかった時に指摘された事が
よっぽど悔しかったんですね。指摘した奴が適切な
知識を持っているとも限らないのに。
113 :デフォルトの名無しさん2010/12/28(火) 00:31:53
意味を知りもしないで「俺って上級者だぜ。へへへっ」と
h抜きするよりはかなりまし。
h抜きするよりはかなりまし。
116 :デフォルトの名無しさん2010/12/29(水) 10:12:38
それはオーバーロードが分からないと言う意味か?
それともnewの詳しい挙動が分からないという意味か?
それともnewの詳しい挙動が分からないという意味か?
117 :デフォルトの名無しさん2011/01/11(火) 20:27:59
すみません。
構造体の1メンバ変数をソートさせているのですが、(ヒープソートです)
他の多数のメンバ変数をソート中に一緒に動かして回らなくて済む
良い手法はないでしょうか?
構造体の1メンバ変数をソートさせているのですが、(ヒープソートです)
他の多数のメンバ変数をソート中に一緒に動かして回らなくて済む
良い手法はないでしょうか?
118 :デフォルトの名無しさん2011/01/11(火) 20:45:10
>>117
データ構造によって結論が違う
データ構造によって結論が違う
119 :デフォルトの名無しさん2011/01/11(火) 21:00:08
>>117
ポインタを回す
ポインタを回す
120 :1172011/01/11(火) 21:05:28
>>118
そうなのですね;
なんとか、最初の保存位置を指すカウンタを用意し、それのみ一緒にソートして
その値の要素数と入替える事を思いつけて今回は解決できました。ありがとうございました。
そうなのですね;
なんとか、最初の保存位置を指すカウンタを用意し、それのみ一緒にソートして
その値の要素数と入替える事を思いつけて今回は解決できました。ありがとうございました。
121 :1172011/01/11(火) 21:07:00
>>119
あー・・値ではなく構造体のポインタを・・でしょうか。
勉強になります。ありがとうございました。
あー・・値ではなく構造体のポインタを・・でしょうか。
勉強になります。ありがとうございました。
122 :デフォルトの名無しさん2011/01/14(金) 22:45:35
質問させてください。
windows VC6.0 MFCで通信プログラムを作成しています。
無線ルータでPBCで複数台設定したときにIP(MACアドレス)をリスト化してユーザが判断して
どの機器と接続するかを選択できるプログラムを作りたいのですが、これはTCPでしか出来ないですよね?
実装させるとすればどの様にすればよろしいでしょうか?
socket() (1)ソケット生成
↓
bind() (2)ソケット登録
↓
listen() (3)ソケット接続準備 (仮に5台まで受け付ける)
↓
accept() (4)ソケット接続待機 ←接続要求
↓
read()/write() (5)受信/送信 ←データ→クライアント側プログラム
↓
close() (6)ソケット切断
listenで複数台の受付をして、acceptで接続する所までは分かったんですが、
これだと一番最初に見つかった相手としかコネクトしないっぽいので困ってます。
windows VC6.0 MFCで通信プログラムを作成しています。
無線ルータでPBCで複数台設定したときにIP(MACアドレス)をリスト化してユーザが判断して
どの機器と接続するかを選択できるプログラムを作りたいのですが、これはTCPでしか出来ないですよね?
実装させるとすればどの様にすればよろしいでしょうか?
socket() (1)ソケット生成
↓
bind() (2)ソケット登録
↓
listen() (3)ソケット接続準備 (仮に5台まで受け付ける)
↓
accept() (4)ソケット接続待機 ←接続要求
↓
read()/write() (5)受信/送信 ←データ→クライアント側プログラム
↓
close() (6)ソケット切断
listenで複数台の受付をして、acceptで接続する所までは分かったんですが、
これだと一番最初に見つかった相手としかコネクトしないっぽいので困ってます。
124 :デフォルトの名無しさん2011/01/15(土) 22:47:51
class Foo{
int x_;
int y_;
Bar& bar;
Baz& baz;
public:
Foo(int x, int y) : x_(x), y_(y), bar(x,y), baz(bar){};
};
こういうクラス作りたいんですが、bazの初期化の仕方が分かりません。
初期化子リストが順番通りに初期化してくれるわけでもないらしいです。
参照をポインタにするしかないんでしょうか
int x_;
int y_;
Bar& bar;
Baz& baz;
public:
Foo(int x, int y) : x_(x), y_(y), bar(x,y), baz(bar){};
};
こういうクラス作りたいんですが、bazの初期化の仕方が分かりません。
初期化子リストが順番通りに初期化してくれるわけでもないらしいです。
参照をポインタにするしかないんでしょうか
126 :デフォルトの名無しさん2011/01/15(土) 22:56:44
えーと、Bar&をBarにでもして下さい。
参照が複数あったときに、どの順番で初期化すればいいかわからないです
Bazのoperator()()がオーバーロードされてて、
(*baz)()みたいな使い方が気持ち悪いので参照を使いたいのです
参照が複数あったときに、どの順番で初期化すればいいかわからないです
Bazのoperator()()がオーバーロードされてて、
(*baz)()みたいな使い方が気持ち悪いので参照を使いたいのです
127 :デフォルトの名無しさん2011/01/15(土) 23:01:20
そんな理由なら
bazを使うときに
Baz& b = *baz;
b();とでもすりゃいいんじゃないの?
bazを使うときに
Baz& b = *baz;
b();とでもすりゃいいんじゃないの?
128 :デフォルトの名無しさん2011/01/15(土) 23:07:34
あーなるほど。ありがとう御座います。そのやり方でいきます。
129 :デフォルトの名無しさん2011/01/15(土) 23:09:24
posixの非同期IOについて質問です.
1.「open」でファイルオープンしてfd取得
2.「aio_read」でファイルリード要求(スレッドによるコールバック指定
3.(以下呼び出されたコールバック関数)
4.aiocb構造体で指定したバッファaのポインタを一時変数に保存
5.aiocb構造体に新たなバッファbと新たなファイルオフセットを設定して,再度「aio_read」でファイルリード要求
6.非同期で読み込んだバッファaを処理
で処理をしていますが,ファイル終端の検出をどのように行えばよいのかわかりません
あらかじめファイルサイズを取得しておくしか方法がないのでしょうか?
1.「open」でファイルオープンしてfd取得
2.「aio_read」でファイルリード要求(スレッドによるコールバック指定
3.(以下呼び出されたコールバック関数)
4.aiocb構造体で指定したバッファaのポインタを一時変数に保存
5.aiocb構造体に新たなバッファbと新たなファイルオフセットを設定して,再度「aio_read」でファイルリード要求
6.非同期で読み込んだバッファaを処理
で処理をしていますが,ファイル終端の検出をどのように行えばよいのかわかりません
あらかじめファイルサイズを取得しておくしか方法がないのでしょうか?
130 :1292011/01/16(日) 00:13:08
自己解決しました.
aio_returnでread/write等の戻り値と同等のものが得られました
aio_returnでread/write等の戻り値と同等のものが得られました
131 :デフォルトの名無しさん2011/01/16(日) 20:57:09
Cからc++に移行真っ最中の者です。
基本的なクラスの書き方は理解して
子供クラスの継承当たりまで理解しました。
C+WINAPIで、簡単なGUIアプリは組めたのですが
クラスを交えてのGUIアプリ開発となるとさっぱり検討もつきませぬ
要はオブジェクト指向が理解できていないのですが、CからC++に進んで方はどんな勉強しました?
既存のプログラムを書き起こしたりしたんですかね?
周りにプログラムわかる人居なくて孤独な独学なんで、
俺はこうやった、とかこうやるといいんじゃねとか、進むべき道を教えてください。
基本的なクラスの書き方は理解して
子供クラスの継承当たりまで理解しました。
C+WINAPIで、簡単なGUIアプリは組めたのですが
クラスを交えてのGUIアプリ開発となるとさっぱり検討もつきませぬ
要はオブジェクト指向が理解できていないのですが、CからC++に進んで方はどんな勉強しました?
既存のプログラムを書き起こしたりしたんですかね?
周りにプログラムわかる人居なくて孤独な独学なんで、
俺はこうやった、とかこうやるといいんじゃねとか、進むべき道を教えてください。
134 :デフォルトの名無しさん2011/01/16(日) 22:29:49
>>131
サンプルソースたくさん読んで、色々簡単なものををたくさん書けばすぐに覚える。
ようは慣れ
サンプルソースたくさん読んで、色々簡単なものををたくさん書けばすぐに覚える。
ようは慣れ
136 :デフォルトの名無しさん2011/01/16(日) 22:43:49
>>131
素直にライセンスの緩いGUIライブラリ探していじってみる、
という方法もある。
VCやMinGWならLilyとか日本語でわかりやすかった
英語だがwxWidgetsとかすごく有名らしい
言語がC#とかならもっと楽チンすぎるが
素直にライセンスの緩いGUIライブラリ探していじってみる、
という方法もある。
VCやMinGWならLilyとか日本語でわかりやすかった
英語だがwxWidgetsとかすごく有名らしい
言語がC#とかならもっと楽チンすぎるが
132 :デフォルトの名無しさん2011/01/16(日) 21:04:14
俺は昔懐かしいBorlandC++3.1に付属していたObjectWindowsライブラリを使いながら覚えた
あんまり参考にならないか
あんまり参考にならないか
133 :デフォルトの名無しさん2011/01/16(日) 21:14:53
俺がC→C++へ移行しようとしたときはクラスの意味が全然わかんなくて。
Javaを1年くらいやってようやくクラスを理解した。
Javaを1年くらいやってようやくクラスを理解した。
137 :デフォルトの名無しさん2011/01/16(日) 22:59:06
WTLがオーポンソースなんだからそれ読めば?
Microsoftが提供するC++なフレームワークですよ。
Microsoftが提供するC++なフレームワークですよ。
138 :デフォルトの名無しさん2011/01/17(月) 11:26:43
GUIは機種依存だから覚えても意味無いよ。
むしろコマンドの方がスクリプトとか使えて応用性がある。
テキストエディターとかつくりたいのなら別だが。
むしろコマンドの方がスクリプトとか使えて応用性がある。
テキストエディターとかつくりたいのなら別だが。
139 :1312011/01/17(月) 22:48:01
皆さんありがとう。
LilyとWTLを導入して少し読んでみました。
まだ難しくて良く読み解けませんが、オブジェクト指向を理解する教本にはなりそうです。
あまりプログラムの時間も取れないのですが
めげずに一日ワンプログラムの精神で頑張りたいと思います。
LilyとWTLを導入して少し読んでみました。
まだ難しくて良く読み解けませんが、オブジェクト指向を理解する教本にはなりそうです。
あまりプログラムの時間も取れないのですが
めげずに一日ワンプログラムの精神で頑張りたいと思います。
140 :デフォルトの名無しさん2011/01/17(月) 23:04:50
>>139
あまり大きなソース読んでも挫折するぞ、小さいのからいけ
あまり大きなソース読んでも挫折するぞ、小さいのからいけ
141 :デフォルトの名無しさん2011/01/20(木) 18:59:56
http://codepad.org/nF5Gtpyt
444〜505行目までのzahyo()が思うように動いてくれません。
やりたいこととしては、
zahyo[j][0][0or1or2]に直方体のx,y,z座標が一番小さい部分、
zahyo[j][1][0or1or2]に直方体のx,y,z座標が一番大きい部分、
の値を後順走査によって求めていきたいのですがわかりません。
どなたかよろしくお願いします。
444〜505行目までのzahyo()が思うように動いてくれません。
やりたいこととしては、
zahyo[j][0][0or1or2]に直方体のx,y,z座標が一番小さい部分、
zahyo[j][1][0or1or2]に直方体のx,y,z座標が一番大きい部分、
の値を後順走査によって求めていきたいのですがわかりません。
どなたかよろしくお願いします。
143 :デフォルトの名無しさん2011/01/21(金) 06:07:56
どこかでみたコードだな
グラフ探索だったか?
グラフ探索だったか?
144 :デフォルトの名無しさん2011/01/21(金) 18:09:32
>>143
そうです!
どうやればいいのかさっぱりで・・・
そうです!
どうやればいいのかさっぱりで・・・
145 :デフォルトの名無しさん2011/01/22(土) 01:56:08
32bit単精度浮動小数点を
32bit(16bit.16bit)の固定小数点に変換するにはどうすればいいですか?
32bit(16bit.16bit)の固定小数点に変換するにはどうすればいいですか?
146 :デフォルトの名無しさん2011/01/22(土) 01:57:17
(int)(x * 65536)
147 :デフォルトの名無しさん2011/01/22(土) 01:59:13
>>146
え、こんなシンプルでいいんですか?
え、こんなシンプルでいいんですか?
149 :デフォルトの名無しさん2011/01/22(土) 02:14:37
>>147
どのへんがダメだと思うのか言ってみ
何か俺の気づいてない問題点があるのかもしれんし
どのへんがダメだと思うのか言ってみ
何か俺の気づいてない問題点があるのかもしれんし
150 :デフォルトの名無しさん2011/01/22(土) 02:32:58
>>149
指数部と仮数部と符号を取り出して云々だと思っていたので
混乱しています
指数部と仮数部と符号を取り出して云々だと思っていたので
混乱しています
152 :デフォルトの名無しさん2011/01/22(土) 07:29:32
>>150
とりあえず>>146が何をしてるのかは分かるのか?
とりあえず>>146が何をしてるのかは分かるのか?
153 :デフォルトの名無しさん2011/01/22(土) 08:29:41
>>150
「指数部と仮数部と符号を取り出して云々」という処理はとても
汎用性が高いので、マシンコード一発で出来る。
FPUを持たないCPUの場合はキミが言った通り、「指数部と仮数部と
符号を取り出して云々」という処理をCコンパイラが生成してくれる。
「指数部と仮数部と符号を取り出して云々」という処理はとても
汎用性が高いので、マシンコード一発で出来る。
FPUを持たないCPUの場合はキミが言った通り、「指数部と仮数部と
符号を取り出して云々」という処理をCコンパイラが生成してくれる。
155 :1452011/01/24(月) 00:07:58
シンプルに考えればいいんですね・・・
とりあえず65536は少数部を2バイト分整数にもってきていると、
ひとまず解決とします。
ありがとうございました
とりあえず65536は少数部を2バイト分整数にもってきていると、
ひとまず解決とします。
ありがとうございました
156 :デフォルトの名無しさん2011/01/25(火) 19:03:03
STLを使う場合って
vector<int> a
見たいに宣言しますが、newを使わなくてもいいのはどうしてなんですか?
クラスなら必要だとおもったんですけど。。。
vector<int> a
見たいに宣言しますが、newを使わなくてもいいのはどうしてなんですか?
クラスなら必要だとおもったんですけど。。。
158 :デフォルトの名無しさん2011/01/25(火) 19:33:20
>>156
クラスでもintでも同じだよ。
その宣言て実行文中?ならそれは自動変数。
自動変数はそれの宣言があるブロックが終わるとその変数が消える。
そういう寿命の変数でいいなら自動変数で使えばいい。
newしたものはdeleteするまで消えない。
そういう寿命の変数が欲しいならnewする。
クラスでもintでも同じだよ。
その宣言て実行文中?ならそれは自動変数。
自動変数はそれの宣言があるブロックが終わるとその変数が消える。
そういう寿命の変数でいいなら自動変数で使えばいい。
newしたものはdeleteするまで消えない。
そういう寿命の変数が欲しいならnewする。
157 :デフォルトの名無しさん2011/01/25(火) 19:15:15
うむ
スタックとヒープで検索をかけるとわかるかもしれない
わからないかもしれない
スタックとヒープで検索をかけるとわかるかもしれない
わからないかもしれない
159 :デフォルトの名無しさん2011/01/25(火) 19:53:42
>>157,158
自動変数でぐぐったら理解できました。
ありがとうございました。
自動変数でぐぐったら理解できました。
ありがとうございました。
160 :デフォルトの名無しさん2011/01/26(水) 20:54:50
CHoge自体はライブラリ内のクラスで、内部はいじれないものなのですが、
class CHogeEx : public CHoge
{
CHogeEx() {}
virtual ~CHogeEx() {}
void Func()
{
// CHoge内のprotectedのメンバ変数やメンバ関数にアクセス
}
};
という、自身にはメンバ変数を持たない派生クラスを作った場合、
void Test(CHoge* pHoge)
{
((CHogeEx*)pHoge)->Func();
}
のように、CHogeのポインタをCHogeExにダウンキャストして
追加したアクセス関数を呼ぶことは、やっても構わないものでしょうか?
class CHogeEx : public CHoge
{
CHogeEx() {}
virtual ~CHogeEx() {}
void Func()
{
// CHoge内のprotectedのメンバ変数やメンバ関数にアクセス
}
};
という、自身にはメンバ変数を持たない派生クラスを作った場合、
void Test(CHoge* pHoge)
{
((CHogeEx*)pHoge)->Func();
}
のように、CHogeのポインタをCHogeExにダウンキャストして
追加したアクセス関数を呼ぶことは、やっても構わないものでしょうか?
161 :デフォルトの名無しさん2011/01/26(水) 21:59:23
ダウンキャストがどういうことが分かってるならいいんじゃね?
163 :デフォルトの名無しさん2011/01/27(木) 00:04:00
ANSI文字セットは時代遅れなの?
みんなwchar_t とか WCHAR とか LPWSTR とか L"文字"って書いてるの?
みんなwchar_t とか WCHAR とか LPWSTR とか L"文字"って書いてるの?
165 :デフォルトの名無しさん2011/01/27(木) 22:46:32
>>163
windowsだったら、wchar_tとかWCHAR使ったほうがいいよ。
windowsだったら、wchar_tとかWCHAR使ったほうがいいよ。
167 :デフォルトの名無しさん2011/01/27(木) 23:06:04
struct CUBE{
int x;
int y;
int z;
}
void* p;
static void g(void *p);
main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}
g(void *p){
p = c;
}
これでpをcと同じ感覚で使える……と思いきや
printfのところで「NULLポインタを通じた参照」となってしまいます。
pはグローバルなのになぜでしょうか?
int x;
int y;
int z;
}
void* p;
static void g(void *p);
main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}
g(void *p){
p = c;
}
これでpをcと同じ感覚で使える……と思いきや
printfのところで「NULLポインタを通じた参照」となってしまいます。
pはグローバルなのになぜでしょうか?
168 :デフォルトの名無しさん2011/01/27(木) 23:08:49
>>167
それ以前にコンパイル通る?
それ以前にコンパイル通る?
171 :デフォルトの名無しさん2011/01/28(金) 00:10:13
>>167
キミがやりたいことはこのように記述する。
static void g(void **p);
main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(&p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}
g(void **p){
*p = c;
}
キミがやりたいことはこのように記述する。
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;
}
174 : ◆QZaw55cn4c 2011/01/28(金) 03:24:26
175 :デフォルトの名無しさん2011/01/28(金) 03:48:55
>>171
ゴミはすっこんでろ
ゴミはすっこんでろ
177 :デフォルトの名無しさん2011/01/28(金) 09:33:52
>>174
これが最小修正
> CUBE c_, *c= &c_;
> g(c);
> g(void *c){
これが最小修正
> CUBE c_, *c= &c_;
> g(c);
> g(void *c){
170 :デフォルトの名無しさん2011/01/28(金) 00:05:31
CPoint CPoint::operator+(const CPoint& obj)
{
CPoint tmp;
tmp.m_x = m_x + obj.m_x;
tmp.m_y = m_y + obj.m_y;
return tmp;
}
// +=演算子オーバーロード
CPoint& CPoint::operator+=(const CPoint& obj)
{
m_x += obj.m_x;
m_y += obj.m_y;
return *this;
}
この2つの違いはなんですか? +=をオーバーロードするときはポインタを返さないといけないんでしょうか?
{
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つの違いはなんですか? +=をオーバーロードするときはポインタを返さないといけないんでしょうか?
172 :デフォルトの名無しさん2011/01/28(金) 00:21:55
>>170
ちっがーうよ。 + と += の機能のちっがーいを考えてごっらーんよ(ケント・デリカット風に)。
int a,b; の時、
a + b の返却値は計算結果のコピー。
だから ( a + b ) = c のようには記述できない(わかりやすくするためにあえて括弧をつけてるよ^^)
一方、a += b は a = a + b で、返却値は a それ自身。
だから、 ( a += b ) = c; のように書くと、結局、 a = c; と同じ結果になる。
このような組み込み型の挙動をクラス型についても実装しようとするとこうなる。
でも本当は
CPoint CPoint::operator+(const CPoint& obj) は
CPoint const CPoint::operator+(const CPoint& obj) と、
返却値に const をつけたほうがいいんだな。そうしないと、
CPoint a,b,c;
( a + b ) = c
でエラーが出なくなっちゃう。
ちっがーうよ。 + と += の機能のちっがーいを考えてごっらーんよ(ケント・デリカット風に)。
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
でエラーが出なくなっちゃう。
176 :デフォルトの名無しさん2011/01/28(金) 06:30:33
C++のコンパイルがgccでうまく通りません。
http://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 オプションでディレクトリの位置を追加してもエラーメッセージが変わりませんでした。
何が間違っているのでしょうか?
http://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 オプションでディレクトリの位置を追加してもエラーメッセージが変わりませんでした。
何が間違っているのでしょうか?
178 :デフォルトの名無しさん2011/01/28(金) 22:27:42
以下のコードのSAがうまく動いてくれないんですが、、
http://codepad.org/8Dha99DZ
C言語でプログラムを組んでみたのですが、
295行目から430行目あたりまでを実行すると、なぜか解が悪い方向にしか進みません。
どなたか解決法をよろしくお願いします。
それ以降の行数でも同じような現象が起きてしまいます...orz
http://codepad.org/8Dha99DZ
C言語でプログラムを組んでみたのですが、
295行目から430行目あたりまでを実行すると、なぜか解が悪い方向にしか進みません。
どなたか解決法をよろしくお願いします。
それ以降の行数でも同じような現象が起きてしまいます...orz
180 :デフォルトの名無しさん2011/01/28(金) 22:35:11
>>178
突然こんな量のコードだされても誰も答えられん
もっと絞るか、原因がわからなければ
もういっそ一度最初から作り直したほうがいい
問題は分割してとりかかるべき
突然こんな量のコードだされても誰も答えられん
もっと絞るか、原因がわからなければ
もういっそ一度最初から作り直したほうがいい
問題は分割してとりかかるべき
182 :デフォルトの名無しさん2011/01/29(土) 00:23:00
要所要所でprintf()で変数内容表示したりして追っていけば?
この長いコードで質問がこんな大雑把じゃぁねぇ。
せめてエラーが出ているのか、実行中にエラーが出ているのか
コンパイル時にwarrningが出ているのか、それともコンパイル後の
実行結果の一部がおかしいのかすべてがおかしいのか、
実行中に暴走することがあるのか等
何がどうおかしいのか言ってほしい。
この長いコードで質問がこんな大雑把じゃぁねぇ。
せめてエラーが出ているのか、実行中にエラーが出ているのか
コンパイル時にwarrningが出ているのか、それともコンパイル後の
実行結果の一部がおかしいのかすべてがおかしいのか、
実行中に暴走することがあるのか等
何がどうおかしいのか言ってほしい。
183 :デフォルトの名無しさん2011/01/29(土) 12:49:12
教えてください
現在、在るゲームに対して DLL インジェクションを行い、d3d9.dll の CreateDevice や SetRenderState などをフックし、命令を書き換えるところまで成功しました
次のステップとして、画面上に表示されているテキストやアイコンを読み取り、それらに対してアクションを行いたいと思います
何か良い方法は無いでしょうか?
現在、在るゲームに対して DLL インジェクションを行い、d3d9.dll の CreateDevice や SetRenderState などをフックし、命令を書き換えるところまで成功しました
次のステップとして、画面上に表示されているテキストやアイコンを読み取り、それらに対してアクションを行いたいと思います
何か良い方法は無いでしょうか?
184 :デフォルトの名無しさん2011/01/29(土) 12:53:11
この板はクラッキングに対して寛容じゃ無い。自分で考えな。
185 :デフォルトの名無しさん2011/01/31(月) 23:08:17
C言語だと戻り値と引数さえ一緒ならどんな関数でも同じ関数ポインタに突っ込めたけど、
C++のメンバ関数だと同じクラスのじゃないと出来ないのね。
TypeErasure使えばいいんだろうけど、融通が利かないというか何と言うか。
C++のメンバ関数だと同じクラスのじゃないと出来ないのね。
TypeErasure使えばいいんだろうけど、融通が利かないというか何と言うか。
186 :デフォルトの名無しさん2011/01/31(月) 23:17:22
std::function使えよ
187 :デフォルトの名無しさん2011/01/31(月) 23:24:10
staticでいいんじゃね。
188 :デフォルトの名無しさん2011/01/31(月) 23:28:30
>>186
C++0xですし。
>>187
非staticが所望なんです。
C++0xですし。
>>187
非staticが所望なんです。
190 :デフォルトの名無しさん2011/02/02(水) 12:06:16
#define EPSIRON 1e-12
main(){
double a;
a=0.000000000000001;
XXXX(a);
}
double XXXX(double a){
if(fabs(a)<EPSIRON){
return 0;
}else{
return a;
}
}
みたいな感じでdouble型の数字がイプシロンより小さい場合に
0に丸めたいのですが、こういう場合の関数名 XXXX() は、何か
お勧めのものとか、一般的に用いられているものありますか?
ググっても、さっぱり見つけられません。
例えば RoundZero()とか ToZero()とか、私が思いつくのは
今一つセンスがありません。
詳しい人、お願いします。
191 :デフォルトの名無しさん2011/02/03(木) 10:56:18
>>190
RoundZero()でいいと思うけど、どうしてもイヤなら命名すれでも見てみたら?
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
RoundZero()でいいと思うけど、どうしてもイヤなら命名すれでも見てみたら?
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
192 :デフォルトの名無しさん2011/02/03(木) 17:12:17
書籍を買って勉強しようと思っているのですが、
独習C 第4版以外に何かお勧めってありますか?
独習C 第4版以外に何かお勧めってありますか?
193 :デフォルトの名無しさん2011/02/03(木) 18:01:58
推薦図書スレでCの入門書について聞くとあっという間にレスが20くらいつくぞ。
そして対外はK&Rがどうこういう話に収束するぞ。
だからいつもこういうんだ。入門書は定番のものなら何を読んでも一緒だ、とね。
そして入門書を何冊もよむことはせず一冊読んだらとっとと
アルゴリズムなり分析設計なりちょっと小粋な数学の本なりを読め、と。
そして対外はK&Rがどうこういう話に収束するぞ。
だからいつもこういうんだ。入門書は定番のものなら何を読んでも一緒だ、とね。
そして入門書を何冊もよむことはせず一冊読んだらとっとと
アルゴリズムなり分析設計なりちょっと小粋な数学の本なりを読め、と。
194 :デフォルトの名無しさん2011/02/03(木) 20:14:42
俺はソフトバンクの「やさしいC」だな。
書籍はメインを決めて時々もう一冊を見るといった、
2種類あると結構理解が速い。
書籍はメインを決めて時々もう一冊を見るといった、
2種類あると結構理解が速い。
195 :デフォルトの名無しさん2011/02/03(木) 20:31:46
独習みたいに分厚くて細かいところまで網羅したやつだと途中で疲れるから、
最初は薄っぺらくてちょっと足りないぐらいのから手をつけた方がいい気がする
最初は薄っぺらくてちょっと足りないぐらいのから手をつけた方がいい気がする
196 :デフォルトの名無しさん2011/02/03(木) 23:59:01
独習Cは厚さの割りに、細かいところに手が届かない印象
基礎を覚える程度なら十分ではあるけど
基礎を覚える程度なら十分ではあるけど
198 : ◆QZaw55cn4c 2011/02/04(金) 01:53:04
199 :デフォルトの名無しさん2011/02/04(金) 04:41:33
あるコマンドがインストールされているか、すなわち使えるかどうかを
Cプログラムから調べる方法をおしえてください 。
コマンドラインからであれば、そのコマンドをうってエラーが帰ってくるかどうかで分かりますが、
プログラム内からはどのように調べればよいのでしょうか?
環境はUbuntu10.10 gcc4.4.5です。
Cプログラムから調べる方法をおしえてください 。
コマンドラインからであれば、そのコマンドをうってエラーが帰ってくるかどうかで分かりますが、
プログラム内からはどのように調べればよいのでしょうか?
環境はUbuntu10.10 gcc4.4.5です。
201 :デフォルトの名無しさん2011/02/04(金) 10:06:17
>>199
system()で呼んでみて、戻り値をチェック。
system()で呼んでみて、戻り値をチェック。
203 :デフォルトの名無しさん2011/02/05(土) 00:51:37
スキルアップしたくて、大学春休みだしOSかドライバか作れるようになるように勉強しようと
思ってるんだけど、どっちの方がとっつきやすいですか?
OSなら「30日でできる! OS自作入門」、ドライバなら「Windows Vistaデバイスドライバプログラミング」
買おうと思ってる
思ってるんだけど、どっちの方がとっつきやすいですか?
OSなら「30日でできる! OS自作入門」、ドライバなら「Windows Vistaデバイスドライバプログラミング」
買おうと思ってる
204 :デフォルトの名無しさん2011/02/05(土) 03:03:31
>>203
とっつきやすいという点ではOS自作のほうが楽だろう。
どこから作り始めてもいいし、好きな流儀で作っていいし、サンプルも豊富。
とっつきやすいという点ではOS自作のほうが楽だろう。
どこから作り始めてもいいし、好きな流儀で作っていいし、サンプルも豊富。
207 :デフォルトの名無しさん2011/02/05(土) 03:55:24
>>204
ありがとう、OSの方がとっつきやすいですか。
ドライバ作れるようになった方が便利そうだけど、OS自作のほうが響き的にかっこいいし
OS自作の本買ってやってみる。さっそくポチった
ありがとう、OSの方がとっつきやすいですか。
ドライバ作れるようになった方が便利そうだけど、OS自作のほうが響き的にかっこいいし
OS自作の本買ってやってみる。さっそくポチった
205 :デフォルトの名無しさん2011/02/05(土) 03:25:28
C言語でオセロゲームを作るとき、<stdio.h>(標準入出力ヘッダーファイル)だけで
作ることは可能ですか?
作ることは可能ですか?
206 :デフォルトの名無しさん2011/02/05(土) 03:47:43
なぜstdio.hだけと制限するのか知りたいとも思わないが
標準Cライブラリだけで作られているオセロゲームは存在しているよ
標準Cライブラリだけで作られているオセロゲームは存在しているよ
208 :デフォルトの名無しさん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. その他
また、理由も添えていただけると助かります。
基本的には3か5だろうと言うのはわかるのですが…。
1. void hoge(int piyo) (現在使用してますが、ベターではないですよね)
2. void hoge (int * piyo)
3. void hoge (const int * piyo)
4. void hoge(int & piyo)
5. void hoge(const int & piyo)
6. その他
また、理由も添えていただけると助かります。
209 :デフォルトの名無しさん2011/02/05(土) 08:53:07
>>208
渡すのが整数型なら、1でいいよ。5でもいいけど、インライン展開されない場合は寧ろコストが掛かる。
クラスか何かを渡すなら、逆ね。
渡すのが整数型なら、1でいいよ。5でもいいけど、インライン展開されない場合は寧ろコストが掛かる。
クラスか何かを渡すなら、逆ね。
210 :デフォルトの名無しさん2011/02/05(土) 15:32:06
低俗な質問ですいません。
csvファイルを読み込んで表示しようとしても文字化けしてしまいます。
表示のところに何か問題がありますか?ご指摘ください!
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
int ch;
fp = fopen(argv[1], "r");
if(fp == NULL) {
printf("\aファイルをオープンできません。\n");
}
else {
while ((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
return(0);
}
csvファイルを読み込んで表示しようとしても文字化けしてしまいます。
表示のところに何か問題がありますか?ご指摘ください!
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
int ch;
fp = fopen(argv[1], "r");
if(fp == NULL) {
printf("\aファイルをオープンできません。\n");
}
else {
while ((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
return(0);
}
211 :デフォルトの名無しさん2011/02/05(土) 15:38:51
>>210
csvの文字形式をシフトJISにでも変換したらどうだろう
csvの文字形式をシフトJISにでも変換したらどうだろう
215 :デフォルトの名無しさん2011/02/05(土) 18:37:08
>>210です。fscanf使ったらできました。配列に格納したんですけど、
構造体を作ってそこに格納することも可能ですか?
構造体を作ってそこに格納することも可能ですか?
218 :デフォルトの名無しさん2011/02/05(土) 22:00:37
>>215
なんで>210がダメでfscanf()で巧くいったのか小一時間問い詰めたいけどまぁいいや。
勿論、fscanf()で構造体に直接格納することも可能。但し、%sを使う場合は%20sのように制限することを考えた方がいい。
更に言えば、どうせ色々考えるならfgets()で取り込んだものをsscanf()でばらす方がいいかもしれない。
つーか、割と普通にそうする。
なんで>210がダメでfscanf()で巧くいったのか小一時間問い詰めたいけどまぁいいや。
勿論、fscanf()で構造体に直接格納することも可能。但し、%sを使う場合は%20sのように制限することを考えた方がいい。
更に言えば、どうせ色々考えるならfgets()で取り込んだものをsscanf()でばらす方がいいかもしれない。
つーか、割と普通にそうする。
212 :デフォルトの名無しさん2011/02/05(土) 15:40:46
1バイトづつじゃなくてバッファにためこんでprintfで%sで表示してみる
213 :デフォルトの名無しさん2011/02/05(土) 17:38:09
windowsアプリを作る場合に
WinMain()とmain()は
名前と引数以外には違いがないと考えていいのでしょうか。
WinMain()とmain()は
名前と引数以外には違いがないと考えていいのでしょうか。
214 :デフォルトの名無しさん2011/02/05(土) 18:18:57
見た目わね
216 :2132011/02/05(土) 18:38:09
>>214
回答ありがとうございます。
たいへん恐縮ですが重ねて質問させてください。
試した限りはWinMainをmainに書き換えても同じように動作するのですが、
同じように動作しているように見えても実は違いがあるということでしょうか。
その場合、その違いがプログラムに深刻な影響を及ぼすケースはあるのでしょうか。
回答ありがとうございます。
たいへん恐縮ですが重ねて質問させてください。
試した限りはWinMainをmainに書き換えても同じように動作するのですが、
同じように動作しているように見えても実は違いがあるということでしょうか。
その場合、その違いがプログラムに深刻な影響を及ぼすケースはあるのでしょうか。
217 :デフォルトの名無しさん2011/02/05(土) 21:58:20
>>216
標準ライブラリだけしか使わないなら大差ないよ。
GUIを含めて色々やろうと思い出すと、問題になるけど。
標準ライブラリだけしか使わないなら大差ないよ。
GUIを含めて色々やろうと思い出すと、問題になるけど。
219 :デフォルトの名無しさん2011/02/05(土) 23:45:01
クラスののメンバー変数に
int NUMと int hoge[NUM]という配列を定義したいのですが、単純にやるとできません。
なにかやる方法はありますか?
int NUMと int hoge[NUM]という配列を定義したいのですが、単純にやるとできません。
なにかやる方法はありますか?
220 :デフォルトの名無しさん2011/02/05(土) 23:54:25
性的にhogeの配列が決まる、つまりNUMがコンパイル時定数であるというのなら
class Victory {
static int const NUM = 10;
int hoge[ NUM ];
};
class Win {
enum{ NUM = 10 };
int hoge[ NUM ];
};
で可能。NUMの値をコンストラクタで取得したいとか言うのなら無理
class Victory {
static int const NUM = 10;
int hoge[ NUM ];
};
class Win {
enum{ NUM = 10 };
int hoge[ NUM ];
};
で可能。NUMの値をコンストラクタで取得したいとか言うのなら無理
221 :デフォルトの名無しさん2011/02/06(日) 00:00:49
コンストラクタで取得したいです。
ポインタのみ定義して、コンストラクタで動的確保するしかないですかね?
ポインタのみ定義して、コンストラクタで動的確保するしかないですかね?
222 :デフォルトの名無しさん2011/02/06(日) 00:02:13
vector使えばいいじゃん。
224 :デフォルトの名無しさん2011/02/06(日) 00:04:19
>>221
無理。動的確保しかない。
っていうか、>>222のいうとおり、vectorで。超便利。かなり早い。
一部の型については特殊化もされているので激速。
無理。動的確保しかない。
っていうか、>>222のいうとおり、vectorで。超便利。かなり早い。
一部の型については特殊化もされているので激速。
228 :デフォルトの名無しさん2011/02/06(日) 18:00:30
>>224
あれってboolさんだけじゃなかったのか
あれってboolさんだけじゃなかったのか
225 :デフォルトの名無しさん2011/02/06(日) 00:41:38
いや、vectorのあの特殊化は有害だよ。
普通の配列のように先頭要素へのポインタを得て、それを介して扱うことが不可能になるのだから。
普通の配列のように先頭要素へのポインタを得て、それを介して扱うことが不可能になるのだから。
229 :デフォルトの名無しさん2011/02/06(日) 19:59:03
fstreamクラスのseekgとseekpって名前が違うだけでまったく同じ機能らしいですが、
なんでわざわざそうしたのですか?
seekっていう関数ひとつだけ用意した方が分かりやすい気がしますが。
なんでわざわざそうしたのですか?
seekっていう関数ひとつだけ用意した方が分かりやすい気がしますが。
234 :デフォルトの名無しさん2011/02/07(月) 17:41:44
>>229
そういう意味か
例えばifstreamではseekpとseekgは事実上同じ意味
しかしstringstreamは実際プログラムを書いてみればわかるが、seekpとseekgは
それぞれ違うポインタを指している
継承上の問題だと思うよ
そういう意味か
例えばifstreamではseekpとseekgは事実上同じ意味
しかしstringstreamは実際プログラムを書いてみればわかるが、seekpとseekgは
それぞれ違うポインタを指している
継承上の問題だと思うよ
236 :2292011/02/07(月) 23:36:13
>>234
ありがとうございます。
seekpとseekgはfstreamだけのものでなくて、
同じくiostreamを継承しているstringstreamなどでも定義されている、
ということを知らなかったのが混乱の原因だったようですね。
基本的には入力ストリームの出力ストリームの位置は異なるけど、
fstreamの場合はそれらはファイルポインタを表しており、
ファイルポインタは1つしかないので、
たまたま常に同じ場所を指すことになっている、
ということでしょうか。
ありがとうございます。
seekpとseekgはfstreamだけのものでなくて、
同じくiostreamを継承しているstringstreamなどでも定義されている、
ということを知らなかったのが混乱の原因だったようですね。
基本的には入力ストリームの出力ストリームの位置は異なるけど、
fstreamの場合はそれらはファイルポインタを表しており、
ファイルポインタは1つしかないので、
たまたま常に同じ場所を指すことになっている、
ということでしょうか。
237 :デフォルトの名無しさん2011/02/08(火) 00:31:57
>>236
ifstream、istringstreamにはseekpはない
ofstream、ostringstreamにはseekgはない
fstreamにはseekp、seekgの両方があるので混乱してるのでしょう
ご存じの通りファイルポインタは1つしかないのでseekpもseekgも同じ意味になります
ところがstringstreamは読み込みと書き込みを別々に行っているため、seekpとseekgは
使い分けなければなりません
ifstream、istringstreamにはseekpはない
ofstream、ostringstreamにはseekgはない
fstreamにはseekp、seekgの両方があるので混乱してるのでしょう
ご存じの通りファイルポインタは1つしかないのでseekpもseekgも同じ意味になります
ところがstringstreamは読み込みと書き込みを別々に行っているため、seekpとseekgは
使い分けなければなりません
239 :2292011/02/08(火) 02:35:44
>>237
ご丁寧にありがとうございます。
疑問が解消しました。
質問に答えてくださった他の皆様も本当にありがとうございました。
とても勉強になりました。
ご丁寧にありがとうございます。
疑問が解消しました。
質問に答えてくださった他の皆様も本当にありがとうございました。
とても勉強になりました。
232 :デフォルトの名無しさん2011/02/06(日) 21:37:36
どこの情報にまったく同じなんて解説があるんだろう
入力ストリームと出力ストリームの位置が混在したら困るやん
入力ストリームと出力ストリームの位置が混在したら困るやん
233 :デフォルトの名無しさん2011/02/07(月) 17:11:59
C++初心者です。
Cで構造体変数を初期化する際によくmemsetで全てのメンバ変数をまとめてゼロクリアしていたのですが
C++でクラスを利用する場合はコンストラクタでメンバ変数一つ一つに初期値を代入する以外に、よく使われる便利な方法というものは無いものでしょうか?
メンバ変数が多いクラスを初期化する際にコンストラクタが長ったらしくなったり、
メンバ追加の度にコンストラクタにも初期化処理を追加しなければないのに慣れず
初期化し忘れたりしないか、とか考えると何か他に便利な方法とか用意されてないのかな?と気になりまして質問させていただきました。
Cで構造体変数を初期化する際によくmemsetで全てのメンバ変数をまとめてゼロクリアしていたのですが
C++でクラスを利用する場合はコンストラクタでメンバ変数一つ一つに初期値を代入する以外に、よく使われる便利な方法というものは無いものでしょうか?
メンバ変数が多いクラスを初期化する際にコンストラクタが長ったらしくなったり、
メンバ追加の度にコンストラクタにも初期化処理を追加しなければないのに慣れず
初期化し忘れたりしないか、とか考えると何か他に便利な方法とか用意されてないのかな?と気になりまして質問させていただきました。
235 :デフォルトの名無しさん2011/02/07(月) 19:39:09
>>233
外部で構造体を初期化するのと、クラスのコンストラクタで自分自身を
初期化するのでは意味が違うような気もするけれど、コンストラクタでなにもしないで、
C風の使い方をすることは出来ます。
コンストラクタ内での定義については、まじめに定義して下さい。
なお、new されたオブジェクトだけなら、operator new を
override してクリアするという手段は(一般的とは言えませんが)あります。
外部で構造体を初期化するのと、クラスのコンストラクタで自分自身を
初期化するのでは意味が違うような気もするけれど、コンストラクタでなにもしないで、
C風の使い方をすることは出来ます。
コンストラクタ内での定義については、まじめに定義して下さい。
なお、new されたオブジェクトだけなら、operator new を
override してクリアするという手段は(一般的とは言えませんが)あります。
238 :デフォルトの名無しさん2011/02/08(火) 00:41:09
http://ideone.com/szDhS
csvファイルをコマンドラインから読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。
読み込むcsvファイル↓
01A,aさん,f,1.1,1.1,1111
02B,bさん,m,2.2,2.2,2222
03C,cさん,f,3.3,3.3,3333
04D,dさん,m,4.4,4.4,4444
05E,eさん,f,5.5,5.5,5555
06F,fさん,m,6.6,6.6,6666
csvファイルをコマンドラインから読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。
読み込むcsvファイル↓
01A,aさん,f,1.1,1.1,1111
02B,bさん,m,2.2,2.2,2222
03C,cさん,f,3.3,3.3,3333
04D,dさん,m,4.4,4.4,4444
05E,eさん,f,5.5,5.5,5555
06F,fさん,m,6.6,6.6,6666
240 :デフォルトの名無しさん2011/02/08(火) 03:57:54
>>238
先ずは警告が出ている113行から直そうか。
先ずは警告が出ている113行から直そうか。
241 :デフォルトの名無しさん2011/02/08(火) 04:04:35
>>238
25行目 return 0; 追加
27行目 for(〜) ; このセミコロン不要
113行目 C==EOF
For(〜){ } の位置関係訂正
http://ideone.com/dP2EE
一応訂正しておいた。見てくれ。
25行目 return 0; 追加
27行目 for(〜) ; このセミコロン不要
113行目 C==EOF
For(〜){ } の位置関係訂正
http://ideone.com/dP2EE
一応訂正しておいた。見てくれ。
242 :デフォルトの名無しさん2011/02/08(火) 19:43:08
>>240 >>241
丁寧にありがとうございます!おかげさまでうまくいきました!
丁寧にありがとうございます!おかげさまでうまくいきました!
243 :デフォルトの名無しさん2011/02/08(火) 21:08:19
int a;
int main()
{
return 0;
}
このaは
スタック領域ですか?
静的領域ですか?
コンパイラ依存ですか?
int main()
{
return 0;
}
このaは
スタック領域ですか?
静的領域ですか?
コンパイラ依存ですか?
245 :デフォルトの名無しさん2011/02/09(水) 00:26:21
スタックじゃない。データ領域。
mainが実行される前に確保される領域。
たとえば、
struct SomeClass
{
SomeClass()//コンストラクタ
{
>>breadpointB
}
}
SomeClass a;
int main()
{
>>breakpointA.
}
としてデバッグ起動すると、SomeClassのコンストラクタ
がmainよりも前に実行されることが確認できる。
mainが実行される前に確保される領域。
たとえば、
struct SomeClass
{
SomeClass()//コンストラクタ
{
>>breadpointB
}
}
SomeClass a;
int main()
{
>>breakpointA.
}
としてデバッグ起動すると、SomeClassのコンストラクタ
がmainよりも前に実行されることが確認できる。
246 :2432011/02/09(水) 00:55:24
>>245
ありがとうございます
データ領域は、スタックともヒープとも静的領域とも違うのですか?
ありがとうございます
データ領域は、スタックともヒープとも静的領域とも違うのですか?
247 :デフォルトの名無しさん2011/02/09(水) 01:13:51
ああ、静的領域と呼ぶのが普通ですね。
訂正します。
訂正します。
248 :2432011/02/09(水) 01:24:34
>>247
ありがとうございました
ありがとうございました
249 :デフォルトの名無しさん2011/02/09(水) 03:31:55
スタック・ヒープってややこしい言葉だよな
メモリ領域としてのスタックとヒープ
データ構造としてのスタックとヒープ
前者のスタックは後者の構造をしているけど
ヒープは前者と後者で全く異なる概念だし
メモリ領域としてのスタックとヒープ
データ構造としてのスタックとヒープ
前者のスタックは後者の構造をしているけど
ヒープは前者と後者で全く異なる概念だし
250 :デフォルトの名無しさん2011/02/09(水) 04:41:49
if(){処理1}
else if(){処理2}
else{処理3}
のようにした時、処理1と処理2がそれぞれ終わった後、処理3に飛んでほしい場合は
どうすればよいのでしょうか?
else if(){処理2}
else{処理3}
のようにした時、処理1と処理2がそれぞれ終わった後、処理3に飛んでほしい場合は
どうすればよいのでしょうか?
253 :デフォルトの名無しさん2011/02/09(水) 08:35:14
>>250
どうなって欲しいのか条件を真理値表に纏めろ。先ずはそれからだ。
例えば、>250のコードだとこうなる。
文面に従えば、処理3は処理3'のようになって欲しいのか? それなら>251だが。
条件1 条件2 処理1 処理2 処理3 処理3'
真 真 ○ × × ○
真 偽 ○ × × ○
偽 真 × ○ × ○
偽 偽 × × ○ ○
どうなって欲しいのか条件を真理値表に纏めろ。先ずはそれからだ。
例えば、>250のコードだとこうなる。
文面に従えば、処理3は処理3'のようになって欲しいのか? それなら>251だが。
条件1 条件2 処理1 処理2 処理3 処理3'
真 真 ○ × × ○
真 偽 ○ × × ○
偽 真 × ○ × ○
偽 偽 × × ○ ○
254 :デフォルトの名無しさん2011/02/09(水) 08:39:55
>253の伝でいけば、>252はこうなるね。
条件1 条件2 処理1 処理2 処理3
真 真 ○ × ○
真 偽 ○ × ○
偽 真 × ○ ○
偽 偽 × × ×
これだったら意味不明な無限ループなんて書かずに
if (条件1 || 条件2) {
if (条件1) 処理1;
else 処理2;
処理3;
}
でいいじゃん。
条件1 条件2 処理1 処理2 処理3
真 真 ○ × ○
真 偽 ○ × ○
偽 真 × ○ ○
偽 偽 × × ×
これだったら意味不明な無限ループなんて書かずに
if (条件1 || 条件2) {
if (条件1) 処理1;
else 処理2;
処理3;
}
でいいじゃん。
260 :デフォルトの名無しさん2011/02/09(水) 14:49:11
>>254
それ条件1が2回評価されるで
それ条件1が2回評価されるで
255 :デフォルトの名無しさん2011/02/09(水) 08:47:49
if(){処理1処理3}
else if(){処理2処理3}
else if(){処理2処理3}
258 :デフォルトの名無しさん2011/02/09(水) 11:25:10
FizzBuzz問題もそうだけど、
案外>>255みたいに同じコード(ここでは処理3)を2度書くケースって多いんだよね^^
案外>>255みたいに同じコード(ここでは処理3)を2度書くケースって多いんだよね^^
256 :デフォルトの名無しさん2011/02/09(水) 08:51:19
処理3が関数でインライン展開され得るならそれがベストかも知らん。
262 :デフォルトの名無しさん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としてこれでいいのか?
したいのだが
template<typename A.typename B,typename C >
void a(A abeg,A aEnd,B bbeg ,B bend,C cbeg,C cend ){
....
}
入力が a,bで出力がcとしてこれでいいのか?
263 :デフォルトの名無しさん2011/02/09(水) 16:17:06
コンテナを操作するアルゴリズムで迷ったときは
STLで似通ったアルゴリズムのインタフェースを参照してみるとよいでしょう。
たとえばtransformは二つの範囲から一つの範囲へ出力する機能を提供します。
STLで似通ったアルゴリズムのインタフェースを参照してみるとよいでしょう。
たとえばtransformは二つの範囲から一つの範囲へ出力する機能を提供します。
267 :デフォルトの名無しさん2011/02/11(金) 05:00:59
if(条件1) 処理1
else if(条件2) 処理2
else goto Label;
処理3
Label:;
でいいのにgoto絶対禁止教って大変だな
else if(条件2) 処理2
else goto Label;
処理3
Label:;
でいいのにgoto絶対禁止教って大変だな
270 :デフォルトの名無しさん2011/02/11(金) 18:34:43
>>267
小さいプログラムしか組まない素人にはgotoは便利だな。
まあ、がんばれw
小さいプログラムしか組まない素人にはgotoは便利だな。
まあ、がんばれw
273 :デフォルトの名無しさん2011/02/12(土) 08:58:41
>>270
構造化例外が無い時代には、エラー処理をgotoで書くと便利だったのは認めるけどな。
構造化例外が無い時代には、エラー処理をgotoで書くと便利だったのは認めるけどな。
274 :デフォルトの名無しさん2011/02/12(土) 11:58:40
>>273
例外関係なく、遙か昔にしかgoto使ったことないわ
例外関係なく、遙か昔にしかgoto使ったことないわ
268 :デフォルトの名無しさん2011/02/11(金) 11:08:44
gotoは便利だからって素人が使うとスパゲッティになっちゃうからな
269 :デフォルトの名無しさん2011/02/11(金) 11:22:33
do {
if(条件1) 処理1;
else if(条件2) 処理2;
else break;
処理3;
} while(0);
if(条件1) 処理1;
else if(条件2) 処理2;
else break;
処理3;
} while(0);
275 :デフォルトの名無しさん2011/02/12(土) 14:12:45
>>267と>>269ってコンパイルしたら同じになる?
276 :デフォルトの名無しさん2011/02/14(月) 10:57:38
>>275
これをコンパイルしてみた。
--
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.
$
--
つまり、事実上全く一緒。
これをコンパイルしてみた。
--
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.
$
--
つまり、事実上全く一緒。
271 :デフォルトの名無しさん2011/02/11(金) 18:49:56
自称大きいブログラムを作ってる人は言うことが違いますね^^
277 :デフォルトの名無しさん2011/02/15(火) 06:24:21
低レベルで書いてた人ほどgotoには拒否感がないような気がする
279 :デフォルトの名無しさん2011/02/15(火) 20:38:36
プログラム何て組んだことがない、ソフトを起動させた事もない人間なんだが
C++でプログラム(主にゲームになるんじゃないか)組むには何をしたらいい?
参考文献を買う?サイト巡って「入門編」みたいのやっていく?
お前ら一番初め何やった
C++でプログラム(主にゲームになるんじゃないか)組むには何をしたらいい?
参考文献を買う?サイト巡って「入門編」みたいのやっていく?
お前ら一番初め何やった
281 :デフォルトの名無しさん2011/02/16(水) 14:02:17
>>279
プログラミングの基礎は置いといて
ゲームを作るとなると主に画像の表示と音楽の再生が辛いところなんだが、
Dxlibっていうライブラリがあるからそれを使うのがとても楽な道。
Dxlibは使用者も多く、作者もかなり活動的だからサンプルもかなり多いし、初心者向けの質問掲示板もあったりする。
主に2Dゲーム用だが3Dも普通にいける。
ただ完全に3D用ならもっといいライブラリがあると思うけども。
プログラミングの基礎は置いといて
ゲームを作るとなると主に画像の表示と音楽の再生が辛いところなんだが、
Dxlibっていうライブラリがあるからそれを使うのがとても楽な道。
Dxlibは使用者も多く、作者もかなり活動的だからサンプルもかなり多いし、初心者向けの質問掲示板もあったりする。
主に2Dゲーム用だが3Dも普通にいける。
ただ完全に3D用ならもっといいライブラリがあると思うけども。
280 :デフォルトの名無しさん2011/02/15(火) 22:58:52
ゲーム作るならHSPでいいんじゃないか?
昔みたいにアセンブラじゃなきゃ処理速度おっつかないみたいな世界じゃなくなったし。
昔みたいにアセンブラじゃなきゃ処理速度おっつかないみたいな世界じゃなくなったし。
282 :デフォルトの名無しさん2011/02/16(水) 16:45:16
Basicにアセンブラまじぇまじぇしてた時代、何もかも皆懐かしい
283 :デフォルトの名無しさん2011/02/16(水) 20:08:35
#include <stdio.h>
struct data{
int menba1;
char menba2[];
}hensu,mozi;
int dainyu(struct data *);
char moziretu(struct data *);
int main()
{
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1);
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
int dainyu(struct data *p)
{
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
変数は上手くいくんですけど文字列が入力できなくて失敗してしまいます
結果 文字列--文字列は
どうか教えてください。
struct data{
int menba1;
char menba2[];
}hensu,mozi;
int dainyu(struct data *);
char moziretu(struct data *);
int main()
{
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1);
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
int dainyu(struct data *p)
{
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
変数は上手くいくんですけど文字列が入力できなくて失敗してしまいます
結果 文字列--文字列は
どうか教えてください。
292 :デフォルトの名無しさん2011/02/16(水) 21:59:24
>>290
>scanf("%d\n",&p->menba1);
これだと>>283が望むような実行結果にならないって言ってんだよ、バカがw
>scanf("%d\n",&p->menba1);
これだと>>283が望むような実行結果にならないって言ってんだよ、バカがw
294 :デフォルトの名無しさん2011/02/16(水) 22:47:40
>>283のscanf("%d",&p->menba1);をscanf("%d\n",&p->menba1);にするとどうなるか
変数-- と表示される
数字入力してエンターを押す→何も表示されない
もう一度エンターを押してみる→何も表示されない
何度エンターを押しても何も表示されないので仕方ないから文字列を入力してエンターを押す
→変数の値は〜
文字列--文字列は〜
と表示される
変数-- と表示される
数字入力してエンターを押す→何も表示されない
もう一度エンターを押してみる→何も表示されない
何度エンターを押しても何も表示されないので仕方ないから文字列を入力してエンターを押す
→変数の値は〜
文字列--文字列は〜
と表示される
295 :デフォルトの名無しさん2011/02/16(水) 23:00:34
>>292
なるよ。バカ。
なるよ。バカ。
285 :デフォルトの名無しさん2011/02/16(水) 20:33:02
指定していませんでしたけど、試しに[32]にしましたが結果は同じでした
286 :デフォルトの名無しさん2011/02/16(水) 20:52:52
scanf("%d\n",&p->menba1);
かな。
かな。
288 :デフォルトの名無しさん2011/02/16(水) 21:10:13
#include <stdio.h>
struct data{
char menba2[];
}mozi;
char moziretu(struct data *);
int main()
{
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
moziretu関数に問題があるんだと思って文字だけにしたんですけどそしたら上手くできました
>>286
中でhensuへの命令と混じってしまったんでしょうか?(イメージですけど)
正直どこがどう間違ってるのかよくわからないんですけど教えて頂けないでしょうか?
struct data{
char menba2[];
}mozi;
char moziretu(struct data *);
int main()
{
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
moziretu関数に問題があるんだと思って文字だけにしたんですけどそしたら上手くできました
>>286
中でhensuへの命令と混じってしまったんでしょうか?(イメージですけど)
正直どこがどう間違ってるのかよくわからないんですけど教えて頂けないでしょうか?
287 :デフォルトの名無しさん2011/02/16(水) 21:04:02
試してから言えw
290 :デフォルトの名無しさん2011/02/16(水) 21:38:44
>>287
お前にはわからないからそう言ったのだろうが、scanfを見ればだいたいわかる。
他の部分に問題が無い事までは目を通さなかったので、「かな」をつけた。
まあ、精進したまえ。
お前にはわからないからそう言ったのだろうが、scanfを見ればだいたいわかる。
他の部分に問題が無い事までは目を通さなかったので、「かな」をつけた。
まあ、精進したまえ。
291 :デフォルトの名無しさん2011/02/16(水) 21:45:38
>>289
ありがとうございます、関数の仕組みを理解してませんでした…
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1); と書き換えたら成功しました
重ね重ね質問ばかりで恐縮ですが、関数を一つに纏めても成功したんですけど
int型で宣言した関数なのになぜgetsとか入れても正常に働くんでしょうか?
int dainyu(struct data *p)
{
printf("文字列--");
gets(p->menba2);
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
>>290
287は自分じゃないです
ありがとうございます、関数の仕組みを理解してませんでした…
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は自分じゃないです
289 :デフォルトの名無しさん2011/02/16(水) 21:24:15
scanf()で整数を読み込むとバッファに改行文字が残る
その後に文字や文字列を読み込むと、その改行文字を読み込む
その後に文字や文字列を読み込むと、その改行文字を読み込む
296 :2832011/02/16(水) 23:16:48
>>294
バッファについて参考書読み直してるとこですが
283で何も文字を入力してないのに実行されたのはscanfで数字入力した後に押したエンターで
改行文字(NL)を取り込んだということですね
>>289さんが既にいってますけど
バッファについて参考書読み直してるとこですが
283で何も文字を入力してないのに実行されたのはscanfで数字入力した後に押したエンターで
改行文字(NL)を取り込んだということですね
>>289さんが既にいってますけど
297 :デフォルトの名無しさん2011/02/17(木) 04:31:27
C++ソースのASTを取得したいのですが、
どういった方法、ツールがあるのでしょうか?
また、実際に試された方っていらっしゃいますか?
あと、GCCでは完全なAST情報を
取得できないようになっているそうなのですが、
本当でしょうか?また、どの程度の情報までなら得られるのでしょうか?
ここ数年気になっていた内容です、よろしくおねがいします。
どういった方法、ツールがあるのでしょうか?
また、実際に試された方っていらっしゃいますか?
あと、GCCでは完全なAST情報を
取得できないようになっているそうなのですが、
本当でしょうか?また、どの程度の情報までなら得られるのでしょうか?
ここ数年気になっていた内容です、よろしくおねがいします。
330 :デフォルトの名無しさん2011/03/03(木) 01:01:29.02
>>297
GCC-XMLとか。あとclangにもそういう機能があるらしい。
すまん、どっちも自身が使ったことはない。
GCC-XMLとか。あとclangにもそういう機能があるらしい。
すまん、どっちも自身が使ったことはない。
299 :デフォルトの名無しさん2011/02/17(木) 10:34:57
はい、C++ソースさんに黄疸が出ていて、
肝臓が悪いんじゃないかと思うので検査してあげたいのです。
ってちがいます。↓こっちです。
http://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E6%A7%8B%E6%96%87%E6%9C%A8
よろしくおねがいします。
肝臓が悪いんじゃないかと思うので検査してあげたいのです。
ってちがいます。↓こっちです。
http://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E6%A7%8B%E6%96%87%E6%9C%A8
よろしくおねがいします。
300 :デフォルトの名無しさん2011/02/17(木) 12:56:11
web制作の人はC++やCを学習することは無駄になりますか?
Javaを覚えればTomcatでjsp出来ますし・・C#ならasp.netでMVCでWEBサイト構築できますし
Javaを覚えればTomcatでjsp出来ますし・・C#ならasp.netでMVCでWEBサイト構築できますし
310 :デフォルトの名無しさん2011/02/19(土) 02:43:07
>>300
2chの鯖の負荷が大きくなったとき、一部をCに変えたはず。
そんな訳で、負荷が大きいサーバのクリティカルな部分の移植とかならありえるかも…
まぁ、めったに無いと思うけどね。
2chの鯖の負荷が大きくなったとき、一部をCに変えたはず。
そんな訳で、負荷が大きいサーバのクリティカルな部分の移植とかならありえるかも…
まぁ、めったに無いと思うけどね。
301 :デフォルトの名無しさん2011/02/17(木) 13:54:22
勉強自体が無駄になることはないだろうけど
WebアプリをCやC++で書くことは多分ない。非効率だから。
WebアプリをCやC++で書くことは多分ない。非効率だから。
302 :デフォルトの名無しさん2011/02/17(木) 17:30:50
とても似ているとはいえ、やはり細かいところで違うので、Cじゃなくて素直にphpやれという気はする。
サーバー側のコードはC++で書いたことがあるが、確かにあまりないかもね。
サーバー側のコードはC++で書いたことがあるが、確かにあまりないかもね。
311 :デフォルトの名無しさん2011/02/26(土) 15:51:03.14
ある既存のクラスAを引数にして処理する関数funcがあるとして、
クラスAにメンバ変数xを1つだけ追加したクラスBも同じfunc関数で扱わせたい場合、
普通にBがAを継承しても、当たり前かもしれませんがfuncはxを処理してくれません。
B用のfuncを別に用意せず、funcの少しの改変で(テンプレート等で)xを処理するように解決する方法がありますか?
クラスAにメンバ変数xを1つだけ追加したクラスBも同じfunc関数で扱わせたい場合、
普通にBがAを継承しても、当たり前かもしれませんがfuncはxを処理してくれません。
B用のfuncを別に用意せず、funcの少しの改変で(テンプレート等で)xを処理するように解決する方法がありますか?
312 :デフォルトの名無しさん2011/02/26(土) 15:59:33.89
func(A* p)
じゃダメなの?
じゃダメなの?
313 :デフォルトの名無しさん2011/02/26(土) 16:09:41.52
OOPの原則に立ち返れば
クラスAとクラスBはそれぞれfunc関数を
メンバに持つべきようなきもするけど。
そうしておかないと
処理対象が増殖していったとき
すぐにハッテン^h^h^h^hハタンする。
クラスAとクラスBはそれぞれfunc関数を
メンバに持つべきようなきもするけど。
そうしておかないと
処理対象が増殖していったとき
すぐにハッテン^h^h^h^hハタンする。
314 :3112011/02/26(土) 17:46:50.70
>>312
それだとxが無いよとコンパイラに叱られます。
>>313
funcが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況があります。
できる人が見たら設計が悪いと指摘されるかもしれませんが・・・
設計を見直さず、デザパタ等でさくっとその場しのぎができないかと思いまして。
それだとxが無いよとコンパイラに叱られます。
>>313
funcが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況があります。
できる人が見たら設計が悪いと指摘されるかもしれませんが・・・
設計を見直さず、デザパタ等でさくっとその場しのぎができないかと思いまして。
315 :デフォルトの名無しさん2011/02/26(土) 17:52:21.15
テンプレートメソッドでいいんじゃねーの?
どんなことしたいのか知らんけどこれが分かりやすいと思う。
どんなことしたいのか知らんけどこれが分かりやすいと思う。
316 :3112011/02/26(土) 17:56:47.98
class A {
public:
void f(int) {}
};
class B : public A {
public:
int x;
void f(int _x) { x = _x; }
};
void func(A* p, int x) {
p->f(x);
}
int main() {
A a;
B b;
func(&a, 1);
func(&b, 2);
return 0;
}
↑こんなその場しのぎでコンパイル通ったのですが、これでいいのでしょうか・・・?
>>315
テンプレートメソッドですか。調べてみます。ありがとうございます。
public:
void f(int) {}
};
class B : public A {
public:
int x;
void f(int _x) { x = _x; }
};
void func(A* p, int x) {
p->f(x);
}
int main() {
A a;
B b;
func(&a, 1);
func(&b, 2);
return 0;
}
↑こんなその場しのぎでコンパイル通ったのですが、これでいいのでしょうか・・・?
>>315
テンプレートメソッドですか。調べてみます。ありがとうございます。
317 :デフォルトの名無しさん2011/02/26(土) 18:06:30.63
>>316
virtual付けてないからどちらもAのfuncが呼ばれるぞ
virtual付けてないからどちらもAのfuncが呼ばれるぞ
318 :3112011/02/26(土) 18:12:43.52
>>317
ぎゃっほんとだ・・・とんでもないミスを。
あとこの方法だとクラスAにも無駄なメンバを追加する必要がありますね。
わざわざ仮想関数持つのも微妙な感じですね。(速度的には問題ない?)
ぎゃっほんとだ・・・とんでもないミスを。
あとこの方法だとクラスAにも無駄なメンバを追加する必要がありますね。
わざわざ仮想関数持つのも微妙な感じですね。(速度的には問題ない?)
319 :デフォルトの名無しさん2011/02/26(土) 18:20:21.70
そもそもfuncの中でxを呼び出すのが無駄なきがする
同じ処理なんだからx弄る必要なんてないだろ
同じ処理なんだからx弄る必要なんてないだろ
320 :3112011/02/26(土) 18:33:33.67
>>319
説明不足ですみません。原則はAとBで同じ処理、Bの時はx弄る処理を途中に追加、をfuncで実現したいです。
どちみち仮想関数持つことになるなら、グローバルな関数funcをやめてテンプレートメソッドでやってみたいと思います。
説明不足ですみません。原則はAとBで同じ処理、Bの時はx弄る処理を途中に追加、をfuncで実現したいです。
どちみち仮想関数持つことになるなら、グローバルな関数funcをやめてテンプレートメソッドでやってみたいと思います。
321 :デフォルトの名無しさん2011/02/26(土) 21:45:11.63
つRTTI
322 :デフォルトの名無しさん2011/02/27(日) 12:59:01.64
>>321
if文を重ねるのは御法度だろ
仮想関数で出来る物はするべき
if文を重ねるのは御法度だろ
仮想関数で出来る物はするべき
323 :デフォルトの名無しさん2011/02/27(日) 20:24:40.56
つfuncが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況
324 :デフォルトの名無しさん2011/02/28(月) 13:44:49.55
関数の定義をヘッダーに書くとmultiple defineとかでるんですけど、
これって普通ですか?
これって普通ですか?
328 :デフォルトの名無しさん2011/02/28(月) 15:36:05.83
>>324
いつエラーが出るのか書け
コンパイルの時なのか、リンク時なのか
いつエラーが出るのか書け
コンパイルの時なのか、リンク時なのか
327 :デフォルトの名無しさん2011/02/28(月) 14:48:55.38
インクルードガードはもちろんつけてありますよ。
たぶん、別々のオブジェクトファイルに同じ定義があるといけないんじゃないんですか?
たぶん、別々のオブジェクトファイルに同じ定義があるといけないんじゃないんですか?
331 :デフォルトの名無しさん2011/03/03(木) 17:42:55.74
struct hoge
{
int foo;
};
hoge h;
#define bar foo
h.bar = 100;
#undef bar
上のように一時的に別名でアクセスしたいんだけど
マクロは使いたくない、よけいなコストも掛けたくない場合になにか手はありますか?
{
int foo;
};
hoge h;
#define bar foo
h.bar = 100;
#undef bar
上のように一時的に別名でアクセスしたいんだけど
マクロは使いたくない、よけいなコストも掛けたくない場合になにか手はありますか?
333 :デフォルトの名無しさん2011/03/03(木) 18:45:28.51
参照は実行時はポインタと同じだよね。
>331は「よけいなコスト」だと思いそう。
一時的でなくていいならunionでしょ。初期化なしで済む。
>331は「よけいなコスト」だと思いそう。
一時的でなくていいならunionでしょ。初期化なしで済む。
335 :デフォルトの名無しさん2011/03/04(金) 08:46:34.37
ポインターだと間接参照のコードが最適化できないことがあるけど、
参照なら最適化されるからね。
参照がポインターと同等なのは引き数の場合でしょ
参照なら最適化されるからね。
参照がポインターと同等なのは引き数の場合でしょ
336 :デフォルトの名無しさん2011/03/06(日) 00:01:41.77
1+5*(7-2)=
↑の文字列をdllに渡すと計算結果が返ってきて、もし文字列が式ではないならエラーが帰ってくるdllを作りたいのですが
秀丸のマクロで利用できるものをお願いします
↑の文字列をdllに渡すと計算結果が返ってきて、もし文字列が式ではないならエラーが帰ってくるdllを作りたいのですが
秀丸のマクロで利用できるものをお願いします
363 :デフォルトの名無しさん2011/03/06(日) 19:52:41.27
秀丸よく知らんけど、>>336の式のパースくらいならDLLにしなくても、
秀丸マクロで書けるんじゃないの。
秀丸マクロで書けるんじゃないの。
364 :デフォルトの名無しさん2011/03/06(日) 19:57:57.26
>>363
良く知らないものに関して、そのマクロで書けそうって、予言者でつか?
良く知らないものに関して、そのマクロで書けそうって、予言者でつか?
341 :デフォルトの名無しさん2011/03/06(日) 02:02:33.14
DLLを作ってメインプログラムにlibファイルを追加したんだけど、
DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。
どなたかわかる方いませんか?
test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。
DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。
どなたかわかる方いませんか?
test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。
346 :3362011/03/06(日) 14:13:49.50
本当お願いします!
助けてください神様
助けてください神様
348 :デフォルトの名無しさん2011/03/06(日) 14:29:33.98
>>346
ここは作ってクレという板じゃないんだよ。有償なら作ってもやるけど。
判ったら去れ。
ここは作ってクレという板じゃないんだよ。有償なら作ってもやるけど。
判ったら去れ。
349 :3362011/03/06(日) 14:36:02.78
わかりました!
では優勝でお願いします!
何日で出来ますか?
では優勝でお願いします!
何日で出来ますか?
354 :3362011/03/06(日) 18:26:36.96
やっぱりここじゃダメですか?
なんかサンプルが載ってるって言われたんですけど
サンプルからdllの作り方もわからないです
伝説の神様おねがいします><
なんかサンプルが載ってるって言われたんですけど
サンプルからdllの作り方もわからないです
伝説の神様おねがいします><
355 :デフォルトの名無しさん2011/03/06(日) 18:29:29.28
361 :3362011/03/06(日) 19:00:06.69
やっぱだめだ
Pythonでdll作れるのかと思ったけど無理だった
本当お願いしますよ神様
Pythonでdll作れるのかと思ったけど無理だった
本当お願いしますよ神様
362 :デフォルトの名無しさん2011/03/06(日) 19:44:16.67
納期1ヶ月、20万で。
ただし、式ではないものの定義はそっちもち。
ただし、式ではないものの定義はそっちもち。
367 :デフォルトの名無しさん2011/03/06(日) 20:47:57.63
>>362
15分で終わる作業で1ヶ月も掛かるとか初心者かよ
15分で終わる作業で1ヶ月も掛かるとか初心者かよ
368 :デフォルトの名無しさん2011/03/06(日) 21:17:12.83
>>367
じゃあ君がやってあげたまえ。
じゃあ君がやってあげたまえ。
369 :デフォルトの名無しさん2011/03/06(日) 21:22:58.83
>>368
20万はらってくれたら。
20万はらってくれたら。
370 :デフォルトの名無しさん2011/03/06(日) 21:58:49.67
>>367
とりあえず、吹っかけるのがこの業界のデフォルト。
とりあえず、吹っかけるのがこの業界のデフォルト。
365 :デフォルトの名無しさん2011/03/06(日) 20:05:54.65
「こういう言葉でググったらいいんじゃないの」とか
「こういう方向性でも解決できるんじゃないの」みたいに
ヒントを出すと、いい加減なこというなみたいに噛み付いてくるやつって
いるけど、最初から他人にやらせるしか頭にないからそういう
反応になるんだろうな。
「こういう方向性でも解決できるんじゃないの」みたいに
ヒントを出すと、いい加減なこというなみたいに噛み付いてくるやつって
いるけど、最初から他人にやらせるしか頭にないからそういう
反応になるんだろうな。
372 :デフォルトの名無しさん2011/03/06(日) 22:50:56.82
void func1( A a )
でおk
でおk
373 :デフォルトの名無しさん2011/03/06(日) 23:11:44.94
>>372
こういうことがしたいんです。
A func0( A a ){
A b;
b = x(a); // aをいろいろ加工してbへ
return b; }
void main() {
A a;
func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す
}
こういうことがしたいんです。
A func0( A a ){
A b;
b = x(a); // aをいろいろ加工してbへ
return b; }
void main() {
A a;
func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す
}
376 :デフォルトの名無しさん2011/03/06(日) 23:34:24.98
コピーコンストラクタを作ったらうまくいきました。
ありがとうございました。
ありがとうございました。
378 :デフォルトの名無しさん2011/03/07(月) 00:59:16.78
unionするとき重要。
通信系のデータマッピングに重要。
その他、データマッピングにも重要。
SSEするときに重要。
スピード狂するときも重要。
通信系のデータマッピングに重要。
その他、データマッピングにも重要。
SSEするときに重要。
スピード狂するときも重要。
380 :デフォルトの名無しさん2011/03/07(月) 01:17:57.54
>>378,379
ありがとうございます
ありがとうございます
381 :デフォルトの名無しさん2011/03/07(月) 05:58:02.17
日本語を含むパスを格納してる文字列の
ローマ字だけを大文字に変換したいのですが、
それに適したライブラリや処理法ってあるでしょうか
ローマ字だけを大文字に変換したいのですが、
それに適したライブラリや処理法ってあるでしょうか
383 :デフォルトの名無しさん2011/03/07(月) 08:04:22.80
ライブラリとリンクする場合は、ライブラリが提供しているヘッダを使うから
気にする必要は無い。ライブラリ作成者は気にしなければいけない。
気にする必要は無い。ライブラリ作成者は気にしなければいけない。
384 :デフォルトの名無しさん2011/03/08(火) 11:23:21.92
ソート済データからの値の検索の場合
常にfindよりlower_bound使う方がいい?
常にfindよりlower_bound使う方がいい?
385 :デフォルトの名無しさん2011/03/08(火) 12:50:24.25
そもそも使い道が違う
findはその値をもつ要素を探す
lower_boundはその値以上の要素を探す
Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる
素直にfindを使うんだ
findはその値をもつ要素を探す
lower_boundはその値以上の要素を探す
Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる
素直にfindを使うんだ
388 :デフォルトの名無しさん2011/03/08(火) 14:00:32.04
>>385
なるほど、値がない場合のことを考えてなかった
値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから
なるほど、値がない場合のことを考えてなかった
値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから
386 :デフォルトの名無しさん2011/03/08(火) 12:54:32.71
俺は誰かがDLL作ってくれるまで諦めませんよ
物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ
物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ
390 :デフォルトの名無しさん2011/03/09(水) 11:49:22.82
もういいや俺は自分でDLL作ることにしましたので(キリ
分からない事をここで聞く事に方向転換しましたよ
分からない事をここで聞く事に方向転換しましたよ
392 :デフォルトの名無しさん2011/03/09(水) 14:04:16.47
DLLを作るための環境を教えてください
出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください
ノートブックなので容量ないのですよ
出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください
ノートブックなので容量ないのですよ
394 :デフォルトの名無しさん2011/03/09(水) 14:13:44.27
VC 以外なら
Windows SDK のコンパイラを使うか
Borland C++ Compiler を使うか
MinGW の gcc を使うか
ってところ?
Windows SDK のコンパイラを使うか
Borland C++ Compiler を使うか
MinGW の gcc を使うか
ってところ?
395 :デフォルトの名無しさん2011/03/09(水) 15:17:00.51
394さん
その3つではどれが一番初心者に向いてますか?
その3つではどれが一番初心者に向いてますか?
397 :デフォルトの名無しさん2011/03/09(水) 19:07:46.21
すみません。
メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を
読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか?
単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。
メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を
読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか?
単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。
399 :デフォルトの名無しさん2011/03/09(水) 19:18:48.35
>>397
動的にコンパイルして、動的にリンクすればできるけど、
大変だと思うよ
動的にコンパイルして、動的にリンクすればできるけど、
大変だと思うよ
402 :3972011/03/09(水) 21:02:49.41
>>398 >>399
ありがとうございます。インタープリターパターンという物が有ったのですね。
インタプリタ言語を再現したかのような形式になるのですね。
ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。
ありがとうございます。インタープリターパターンという物が有ったのですね。
インタプリタ言語を再現したかのような形式になるのですね。
ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。
398 :デフォルトの名無しさん2011/03/09(水) 19:13:53.31
インタープリターパターンといいます
404 :デフォルトの名無しさん2011/03/10(木) 01:17:39.06
if((t%320)/80==1){〜〜}
if((t%320)/80==3){〜〜}
と
if((t%320)/80==1){〜〜}
else if((t%320)/80==3){〜〜}
ではどっちが早いんですの? 極わずかな違いだろうけど。
((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、
elseでぶっ飛ぶこと自体めんどくさいのかなって。
if((t%320)/80==3){〜〜}
と
if((t%320)/80==1){〜〜}
else if((t%320)/80==3){〜〜}
ではどっちが早いんですの? 極わずかな違いだろうけど。
((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、
elseでぶっ飛ぶこと自体めんどくさいのかなって。
407 :デフォルトの名無しさん2011/03/10(木) 04:19:17.77
>>404
tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。
整数型ならコンパイラが何とかするだろうけど。
tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。
整数型ならコンパイラが何とかするだろうけど。
408 :デフォルトの名無しさん2011/03/10(木) 07:09:05.14
質問です。
C言語の数値配列はなぜscanfのときは&がいるのに
printfのときは&がいらないんですか?
C言語の数値配列はなぜscanfのときは&がいるのに
printfのときは&がいらないんですか?
409 :デフォルトの名無しさん2011/03/10(木) 07:26:25.93
>>408
まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。
例)
int hoge[10];
hoge[0] これは、int型データー。
&hoge[0] これは、hoge[0]のアドレスを指す。
hoge これも、hoge[0]のアドレスを指す。
だから、 hoge と &hoge「0」 は同じものだ。
まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。
例)
int hoge[10];
hoge[0] これは、int型データー。
&hoge[0] これは、hoge[0]のアドレスを指す。
hoge これも、hoge[0]のアドレスを指す。
だから、 hoge と &hoge「0」 は同じものだ。
411 :デフォルトの名無しさん2011/03/10(木) 07:40:39.16
>>409
見当違いだ。
用意されている関数とは別に、自作関数fを考えたとき
引数xの値を書き換えるにはどうすれば出来るか考えろ。
見当違いだ。
用意されている関数とは別に、自作関数fを考えたとき
引数xの値を書き換えるにはどうすれば出来るか考えろ。
442 :4082011/03/11(金) 03:52:59.23
>>409さん
たとえば
int data[10];
int i;
for (i = 0;i < 10;i++) {
printf("%d 番目の数値を入力して下さい:",i);
scanf("%d",&data[i]);
}
for (i = 9;i >= 0;i--) {
printf("%d ",data[i]);
}
printf("\n");
なぜこのプログラムではprintfのときに配列個々に&をつけていないのでしょうか。
配列の名前は配列の先頭のアドレスを表すつまり、このプログラムなら
data=&data[0]なのはわかりますが、なぜほかの要素に&をつけていないのに
データが参照されているかということがわからないのです。
たとえば
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]なのはわかりますが、なぜほかの要素に&をつけていないのに
データが参照されているかということがわからないのです。
410 :デフォルトの名無しさん2011/03/10(木) 07:39:04.04
×だから、 hoge と &hoge「0」 は同じものだ。
○だから、 hoge と &hoge[0] は同じものだ。
○だから、 hoge と &hoge[0] は同じものだ。
412 :デフォルトの名無しさん2011/03/10(木) 07:43:04.24
値の更新したいとき。
int f(int x) では値の更新できないだろ。
だからアドレス渡しのint f(int *x)にする必要がある。
printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。
int f(int x) では値の更新できないだろ。
だからアドレス渡しのint f(int *x)にする必要がある。
printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。
414 :デフォルトの名無しさん2011/03/10(木) 10:14:09.75
CでDLL作るのとC++でDLL作るのはどちらが簡単ですか?
速度はどっちが速いですか?
速度はどっちが速いですか?
418 :デフォルトの名無しさん2011/03/10(木) 19:49:47.68
>>414
CもC++もこれから学ぶのなら絶対C++。
C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。
CもC++もこれから学ぶのなら絶対C++。
C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。
416 :デフォルトの名無しさん2011/03/10(木) 11:21:55.29
すいません、質問です。
ShowDialog()ではフォームが開くのですが、
Show()に変えると開かなくなってしまいました。
エラーにもならないので原因がわからずこまっています。
ShowDialog()ではフォームが開くのですが、
Show()に変えると開かなくなってしまいました。
エラーにもならないので原因がわからずこまっています。
422 :デフォルトの名無しさん2011/03/10(木) 23:20:01.18
C++ を便利な C として使うと言ってる人は、
C++ や C をキチンと使いこなせてるのかな?
C++ や C をキチンと使いこなせてるのかな?
423 :デフォルトの名無しさん2011/03/10(木) 23:54:34.29
better Cとして使ってもいいって普通に言われてないか?
425 :デフォルトの名無しさん2011/03/11(金) 00:14:01.88
>>423
それは better C が便利だから言われてるのではなく、
C++ プログラマが自由に C++ を使いたくて、C の制限を
排除する為の方便として言われてるだけ。
実際は C プログラマにとってデメリットはあれど、大した
メリットはない。
それは better C が便利だから言われてるのではなく、
C++ プログラマが自由に C++ を使いたくて、C の制限を
排除する為の方便として言われてるだけ。
実際は C プログラマにとってデメリットはあれど、大した
メリットはない。
426 :デフォルトの名無しさん2011/03/11(金) 00:33:46.14
C++はCを由来とする言語だがCとはおおよそ異なる言語に進化している。
初学者必読の書、Effective C++を読むだけでも、
Better Cなどという使い方はありえないと教わる。
実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。
CにはCの、C++にはC++の利点があり、
双方の利点は競合している。
初学者必読の書、Effective C++を読むだけでも、
Better Cなどという使い方はありえないと教わる。
実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。
CにはCの、C++にはC++の利点があり、
双方の利点は競合している。
427 :デフォルトの名無しさん2011/03/11(金) 01:12:03.09
ベターCいいと思うけどね
関数ローカルで可変長のバッファがほしいなーとか思ったときに
vectorでササッとやっつけしちゃったり
その程度でも十分役に立つし
関数ローカルで可変長のバッファがほしいなーとか思ったときに
vectorでササッとやっつけしちゃったり
その程度でも十分役に立つし
428 :デフォルトの名無しさん2011/03/11(金) 01:19:51.86
それは C プログラマが alloca() でササッとやっつけるのとどう違うの?
もちろん malloc/free でも良いよ
もちろん malloc/free でも良いよ
429 :デフォルトの名無しさん2011/03/11(金) 01:27:43.01
>>428
なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん
なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん
430 :デフォルトの名無しさん2011/03/11(金) 01:31:14.68
>>429
で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?
で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?
431 :デフォルトの名無しさん2011/03/11(金) 01:37:21.50
allocaは関数を抜けるときに開放してくれるとは限らないよ
432 :デフォルトの名無しさん2011/03/11(金) 01:40:03.00
>>431
それはどんな時?
それはどんな時?
433 :デフォルトの名無しさん2011/03/11(金) 01:42:08.48
ライブラリで実装の時とか
434 :デフォルトの名無しさん2011/03/11(金) 01:58:46.11
>>433
つ 無理筋
もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い
つ 無理筋
もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い
435 :デフォルトの名無しさん2011/03/11(金) 02:03:30.81
建前:
「Better C として使うと便利だよ〜」
本音:
「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」
「Better C として使うと便利だよ〜」
本音:
「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」
436 :デフォルトの名無しさん2011/03/11(金) 02:10:27.58
中途半端な知識で書かれたC++コードなら純Cのがまだマシ
440 :デフォルトの名無しさん2011/03/11(金) 02:35:59.83
>>436
リーナストーバルズちゃんもそう言ってたな。
実際、Cの流儀で書かれたC++コードほど迷惑なものはない。
リーナストーバルズちゃんもそう言ってたな。
実際、Cの流儀で書かれたC++コードほど迷惑なものはない。
437 :デフォルトの名無しさん2011/03/11(金) 02:12:23.02
完全無欠なる知識でC++のコードを書けるのは、この世界で一人だけ
438 :デフォルトの名無しさん2011/03/11(金) 02:21:28.78
allocaって標準入りしたの?
C99で可変長配列が採用されたから今後も予定はないって聞いてたけど
C99で可変長配列が採用されたから今後も予定はないって聞いてたけど
439 :デフォルトの名無しさん2011/03/11(金) 02:31:30.81
>>438
入ってない。可変長配列でオケ。
入ってない。可変長配列でオケ。
441 :デフォルトの名無しさん2011/03/11(金) 02:41:28.45
結局、ベターCって誰得?
444 :デフォルトの名無しさん2011/03/11(金) 06:56:05.10
>>441
俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが
俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利
合わない人と組んでやるときは、誰の特にもならない
俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが
俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利
合わない人と組んでやるときは、誰の特にもならない
446 :デフォルトの名無しさん2011/03/11(金) 08:30:07.62
>>444
ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。
IDE必須になるのが嫌だな。
ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。
IDE必須になるのが嫌だな。
447 :デフォルトの名無しさん2011/03/11(金) 08:42:24.51
>>444
クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・
元々がC with Classな訳だし
クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・
元々がC with Classな訳だし
448 :デフォルトの名無しさん2011/03/11(金) 08:58:28.54
>>447
そう?
俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは
ちょっと便利な構造体だけどな?
継承とか演算子のオーバーロードがあるとC++って感じになる
と言いつつ、クラスの性質に合わせて両方とも使ってるけどね
そう?
俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは
ちょっと便利な構造体だけどな?
継承とか演算子のオーバーロードがあるとC++って感じになる
と言いつつ、クラスの性質に合わせて両方とも使ってるけどね
463 :デフォルトの名無しさん2011/03/12(土) 00:45:03.54
>>448
もちろん STL も使うでしょ?
そこから分かる事は、ベターCというのは人に依って範囲が全然違うから
具体的な実態を持たない、気をつけるべき用語だと言う事だね。
もちろん STL も使うでしょ?
そこから分かる事は、ベターCというのは人に依って範囲が全然違うから
具体的な実態を持たない、気をつけるべき用語だと言う事だね。
443 :デフォルトの名無しさん2011/03/11(金) 04:01:33.33
scanfが要求するのはポインタ、printfが要求するのは値。
単にこれだけの違い。
void f( int ); と void f( int * ); の違いみたいなもんですね。
パラメータ型が違うんだから、与える引数の型も変わって当然。
単にこれだけの違い。
void f( int ); と void f( int * ); の違いみたいなもんですね。
パラメータ型が違うんだから、与える引数の型も変わって当然。
445 :デフォルトの名無しさん2011/03/11(金) 07:55:56.16
BetterCとして作るときって言うと、構造体に演算子オーバロードはよく使うな。自分用ツールなら他人が読めるかは余り気にせずできるし。
それでも流石にDoxygenコメント位入れるけど。
それでも流石にDoxygenコメント位入れるけど。
449 :デフォルトの名無しさん2011/03/11(金) 10:15:11.38
DLLを作るとき1+2=3みたいに計算させる場合はCとC++どっちがいいのか聞いておるのだ
452 :デフォルトの名無しさん2011/03/11(金) 10:56:10.21
勉強熱心な若者はCでアイフォンアプリもアンドロイドアプリも作れることを学習したんですよ
460 :デフォルトの名無しさん2011/03/11(金) 23:16:01.68
っ全然関係ねーけど、
町田市ようやく電気回復したよ。
9時間C++で遊べず^^;
町田市ようやく電気回復したよ。
9時間C++で遊べず^^;
461 :デフォルトの名無しさん2011/03/11(金) 23:43:36.66
それは喜ばしいが小田急とJRが止まってるから町田に帰れない><
462 :デフォルトの名無しさん2011/03/12(土) 00:20:57.01
今回は被災しなかった地域だけど
俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる
お前らも折り畳み自転車くらい持っとけば?
俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる
お前らも折り畳み自転車くらい持っとけば?
464 :デフォルトの名無しさん2011/03/12(土) 05:09:26.98
>>462
道路はどこも渋滞と帰宅難民で大混雑だそうだから気をつけなよ
道路はどこも渋滞と帰宅難民で大混雑だそうだから気をつけなよ
465 :デフォルトの名無しさん2011/03/12(土) 13:39:27.78
DLLのグローバル変数やstatic変数の寿命って最初にロードされたときですか?
467 :デフォルトの名無しさん2011/03/15(火) 21:59:40.13
ttp://n.xxad.net/watch/sm13809685
【どうすればこの欲望の渦巻く堕落した世界に私の名を残せるだろうか】
※名を残したいとは思わないがw。
【狂乱のマシンを残せばいい】
【この狂乱の世界に相応しい野獣のようなマシンを】
【狼が来たからやってきた】
【お前の平和な街は今はもう安全ではない】
468 :デフォルトの名無しさん2011/03/16(水) 08:25:09.18
すみません。C++でファイル等の読込状況をリアルタイム表示したいのですが、
マルチタスク、プロセスなど色々有る様なのですが、何を学ぶのが適切でしょうか?
また、学習にオススメのサイト、学習用サンプルの有るサイトなども有れば、教えて頂けますと幸いです。よろしくお願いします。
マルチタスク、プロセスなど色々有る様なのですが、何を学ぶのが適切でしょうか?
また、学習にオススメのサイト、学習用サンプルの有るサイトなども有れば、教えて頂けますと幸いです。よろしくお願いします。
469 :デフォルトの名無しさん2011/03/16(水) 20:54:30.09
>>468
スレッド。
スレッド。
470 :4682011/03/16(水) 22:58:44.95
>>469
マルチスレッドなのですね。ありがとうございます
マルチスレッドなのですね。ありがとうございます
471 :デフォルトの名無しさん2011/03/22(火) 00:22:33.52
>>468
分割ファイル読みの方が楽だと思うけど。
分割ファイル読みの方が楽だと思うけど。
472 :デフォルトの名無しさん2011/04/05(火) 02:49:28.72
const char*
char const*
の違いを教えてください
char const*
の違いを教えてください
473 :デフォルトの名無しさん2011/04/05(火) 03:14:41.32
>>472
同じ
同じ
474 :デフォルトの名無しさん2011/04/05(火) 03:43:50.45
>>473
ありがとうございます!!!
ありがとうございます!!!
475 :デフォルトの名無しさん2011/04/05(火) 19:53:08.28
西日本も福島原発の放射能に曝される。
4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
今後 http://atmc.jp/ を注目せよ。
4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
今後 http://atmc.jp/ を注目せよ。
478 :デフォルトの名無しさん2011/05/04(水) 16:45:02.58
#include<stdio.h>
main()
{
int a1,a2,a3,a4;
a1 = 5;
a1 = a1 + 2;
printf("a1 = %d\n",a1);
a2 = 5;
a2 += 2;
printf("a2 = %d\n",a2);
a3 = 5;
a3 = a3++ + 2;
printf("a3 = %d\n",a3);
a4 = 5;
printf("a4 = %d\n",a4++ +2);
return 0;
}
なぜかコンパイル出来ません
6行目のa1 = a1 + 2;が指摘されてるんですが、理由が分かりません
main()
{
int a1,a2,a3,a4;
a1 = 5;
a1 = a1 + 2;
printf("a1 = %d\n",a1);
a2 = 5;
a2 += 2;
printf("a2 = %d\n",a2);
a3 = 5;
a3 = a3++ + 2;
printf("a3 = %d\n",a3);
a4 = 5;
printf("a4 = %d\n",a4++ +2);
return 0;
}
なぜかコンパイル出来ません
6行目のa1 = a1 + 2;が指摘されてるんですが、理由が分かりません
479 :デフォルトの名無しさん2011/05/04(水) 16:47:01.47
480 :デフォルトの名無しさん2011/05/04(水) 16:48:45.45
>>478
main関数に型がついてないだけだよ!
codepadは無くても良いのね
main関数に型がついてないだけだよ!
codepadは無くても良いのね
481 :デフォルトの名無しさん2011/05/04(水) 16:51:19.60
>>478です
int mainで出来ました
だけど、今までこれ以外の他のコードではint mainとかかなくてもコンパイル出来てたんですが
なぜこのソースに限ってはint mainとしなきゃダメだったんでしょうか?
int mainで出来ました
だけど、今までこれ以外の他のコードではint mainとかかなくてもコンパイル出来てたんですが
なぜこのソースに限ってはint mainとしなきゃダメだったんでしょうか?
482 :デフォルトの名無しさん2011/05/04(水) 16:53:44.72
>>481
コンパイルする環境が変わったとしか思えない
コンパイルする環境が変わったとしか思えない
484 :デフォルトの名無しさん2011/05/04(水) 16:59:09.67
いままで return 0; つけてなかったんじゃねーの
487 :デフォルトの名無しさん2011/05/04(水) 17:14:19.53
>>484
それはないです
ずっとソースを使いまわしながら関数だけ変更してたので
たまたま今回はint mainにしなければなぜかコンパイル出来ない状態になったので
ビックリしております
環境が変わったにしてもその理由もサッパリです
ただ、大した問題じゃなさそうだし解決したのでよしとします
それはないです
ずっとソースを使いまわしながら関数だけ変更してたので
たまたま今回はint mainにしなければなぜかコンパイル出来ない状態になったので
ビックリしております
環境が変わったにしてもその理由もサッパリです
ただ、大した問題じゃなさそうだし解決したのでよしとします
485 :デフォルトの名無しさん2011/05/04(水) 17:05:37.07
拡張子を .c にすると C になって int を省略できるけど
拡張子を .cpp にすると C++ になって int を省略できないとか
そういうことじゃないのかい
拡張子を .cpp にすると C++ になって int を省略できないとか
そういうことじゃないのかい
486 :デフォルトの名無しさん2011/05/04(水) 17:07:34.24
今までOKで急にエラーになったんなら、なにかしら環境変わってるだろ。
490 :デフォルトの名無しさん2011/05/04(水) 18:25:08.91
どうゆうときに使うんでしょうか?
492 :デフォルトの名無しさん2011/05/04(水) 18:34:24.93
>>490
置換用のマクロだよ
置換用のマクロだよ
491 :デフォルトの名無しさん2011/05/04(水) 18:33:24.25
名前空間を汚すだけのバッドノウハウです
使う必要はありません
使う必要はありません
495 :デフォルトの名無しさん2011/05/05(木) 00:10:15.05
メンバー変数の初期化順って仕様で決まってる?
496 :デフォルトの名無しさん2011/05/05(木) 00:25:49.87
>>495
初期化子の話なら決まってるよ
初期化子の話なら決まってるよ
497 :デフォルトの名無しさん2011/05/05(木) 23:45:19.26
c++のホントに最初の入門書だとやさしいc++で宜しいでしょうか
他の言語はC言語をさわりだけやった程度なので、他の言語をやった人向けのは難しいです
他の言語はC言語をさわりだけやった程度なので、他の言語をやった人向けのは難しいです
498 :デフォルトの名無しさん2011/05/06(金) 01:33:46.81
>>497
なんかググったら同じ本二種類出てきてわからないが、理解できそうならそれでいいと思うよ
初心者用って書いてあるけど他の言語習得者向けな本があること知ってるなら他に注意すべきこともないだろう
C++はコンパイルは通るし動くけどやっちゃいけないことというのが多いので
むしろ基礎が終わったら、そのうちEffectiveC++とか読むのをおすすめする
ちょっと便利な機能の増えたCとして使う気ならべつにいいが
なんかググったら同じ本二種類出てきてわからないが、理解できそうならそれでいいと思うよ
初心者用って書いてあるけど他の言語習得者向けな本があること知ってるなら他に注意すべきこともないだろう
C++はコンパイルは通るし動くけどやっちゃいけないことというのが多いので
むしろ基礎が終わったら、そのうちEffectiveC++とか読むのをおすすめする
ちょっと便利な機能の増えたCとして使う気ならべつにいいが
499 :デフォルトの名無しさん2011/05/06(金) 01:59:32.25
初心者はC++に触っちゃいけない。バッドノウハウの塊だから。
まだ、perlの方がまし。
まだ、perlの方がまし。
500 :デフォルトの名無しさん2011/05/06(金) 02:09:18.61
getcharってのは何か文字を入力したらその文字だけを蓄えるという意味ですか?
501 :>>500です2011/05/06(金) 02:39:24.23
while (1) {
printf("A:\n");
printf("X:\n");
while (1) {
c = getchar();
if(c != '\n') /*cが\nでないなら*/
break;
}
switch (c){
case 'A':
case 'a':
printf("\nAだった\n\n");
break;
case 'X':
case 'x':
end = 1;
break;
default:
printf("\nまじめにやれ\n\n");
break;
}
if (end == 1) /*endが1なら*/
break; /*whileループを抜ける*/
}
printf("\nおわり\n");
Aとa、Xとx以外の文字を入力すると「まじめにやれ」と出力されるのはどこで判断してるのかが
分かりません。
また6,7行目と25,26秒目のifのところがイマイチ理解できません。
printf("A:\n");
printf("X:\n");
while (1) {
c = getchar();
if(c != '\n') /*cが\nでないなら*/
break;
}
switch (c){
case 'A':
case 'a':
printf("\nAだった\n\n");
break;
case 'X':
case 'x':
end = 1;
break;
default:
printf("\nまじめにやれ\n\n");
break;
}
if (end == 1) /*endが1なら*/
break; /*whileループを抜ける*/
}
printf("\nおわり\n");
Aとa、Xとx以外の文字を入力すると「まじめにやれ」と出力されるのはどこで判断してるのかが
分かりません。
また6,7行目と25,26秒目のifのところがイマイチ理解できません。
502 :デフォルトの名無しさん2011/05/06(金) 02:47:59.64
>>501
default: がなんなのか分からない
breakの意味が分からないってことか?
default: がなんなのか分からない
breakの意味が分からないってことか?
503 :デフォルトの名無しさん2011/05/06(金) 02:52:22.64
>>502
それは大丈夫です
それは大丈夫です
548 :デフォルトの名無しさん2011/05/09(月) 16:16:22.39
>>547
whileが真の間だけ繰り返すというのは理解してるんですが、この場合、何か入力したら、
getcharがゲットし、それをcに代入するわけですよね?
ここでここでcが\nと等しくない(>>501の7行目)ってのが何を意味するのかイメージつかめません
また、24行目のif( end == 1)の1ってのがどういうアレなのかもイメージ尽きません
whileが真の間だけ繰り返すというのは理解してるんですが、この場合、何か入力したら、
getcharがゲットし、それをcに代入するわけですよね?
ここでここでcが\nと等しくない(>>501の7行目)ってのが何を意味するのかイメージつかめません
また、24行目のif( end == 1)の1ってのがどういうアレなのかもイメージ尽きません
550 :デフォルトの名無しさん2011/05/09(月) 17:11:39.62
>>548
端末に例えばAだけ入力したくても通常は1行入力モードだから改行文字が必要。
で、そいつを入力すると今度は判定の邪魔になるから改行文字は無視したい。
さて、どうする? と言うお話だったのさ。
端末に例えばAだけ入力したくても通常は1行入力モードだから改行文字が必要。
で、そいつを入力すると今度は判定の邪魔になるから改行文字は無視したい。
さて、どうする? と言うお話だったのさ。
551 :デフォルトの名無しさん2011/05/09(月) 17:16:12.62
>>548
getchar() は、入力した文字を1文字ずつ返します。 改行も '\n' という文字になります。
例えばあなたは、まず a を押し、次にエンターを押し、さらに x を押し、次にまたエンターを押したとしますね?
そうすると、最初は getchar() が 'a' を返し、それが c に代入され、次の時 getchar() は '\n' を返し、それが c に代入され、さらにその次の時 getchar() は 'x' を返し、以下同様に動きます。
549氏の言われるようにそれで1行ずつプログラムの動きを追ってみてください。 人間コンピュータになったつもりで。
end の 1 は、ほら、case 'x': のところで代入してるじゃないですか。 end に 1 を代入したら end が 1 になり、 end == 1 が成立するようになります。
getchar() は、入力した文字を1文字ずつ返します。 改行も '\n' という文字になります。
例えばあなたは、まず a を押し、次にエンターを押し、さらに x を押し、次にまたエンターを押したとしますね?
そうすると、最初は getchar() が 'a' を返し、それが c に代入され、次の時 getchar() は '\n' を返し、それが c に代入され、さらにその次の時 getchar() は 'x' を返し、以下同様に動きます。
549氏の言われるようにそれで1行ずつプログラムの動きを追ってみてください。 人間コンピュータになったつもりで。
end の 1 は、ほら、case 'x': のところで代入してるじゃないですか。 end に 1 を代入したら end が 1 になり、 end == 1 が成立するようになります。
506 :デフォルトの名無しさん2011/05/06(金) 14:23:43.80
case 'X':
case 'x':
end = 1;
break;
breakがないとcaseはそのままスルーしてたとえXでもendのところにくる
だが一般にこれは行儀が悪く良くない書き方
case 'x':
end = 1;
break;
breakがないとcaseはそのままスルーしてたとえXでもendのところにくる
だが一般にこれは行儀が悪く良くない書き方
507 :デフォルトの名無しさん2011/05/06(金) 14:36:31.73
end 1ってのはそもそもどういう役割ですか?
546 :デフォルトの名無しさん2011/05/09(月) 16:00:30.77
>>507
どうもすいません
aかAを入力すると「Aだった」出力されます
それ以外のキーを入力すると「まじめにやれ」と出力されます
つまりXかxを入力しない限り、このコマンドは終わらないということですが、
それは何がどう働いてるからこういう動きになるのでしょうか?
どうもすいません
aかAを入力すると「Aだった」出力されます
それ以外のキーを入力すると「まじめにやれ」と出力されます
つまりXかxを入力しない限り、このコマンドは終わらないということですが、
それは何がどう働いてるからこういう動きになるのでしょうか?
508 :デフォルトの名無しさん2011/05/06(金) 15:04:36.37
たぶんX,xが入力された場合もwhile(1)のループを抜けたいんだろうけど
switch文の中なので直接飛べないのでendという変数をフラグにしてあるんだろ
swtichの次のところでendが1ならwhileループを抜けると書いてある
switch文の中なので直接飛べないのでendという変数をフラグにしてあるんだろ
swtichの次のところでendが1ならwhileループを抜けると書いてある
509 :デフォルトの名無しさん2011/05/06(金) 15:13:05.69
初心者です
VC++で、コンボボックスにデータバインドする方法を教えてください。
XSDファイルをバインドしたいのですが、データソースには「なし」としか書かれていなくて困っています
VC++で、コンボボックスにデータバインドする方法を教えてください。
XSDファイルをバインドしたいのですが、データソースには「なし」としか書かれていなくて困っています
532 :デフォルトの名無しさん2011/05/07(土) 16:31:42.78
>>509
winapiスレがいいですよ
winapiスレがいいですよ
510 :デフォルトの名無しさん2011/05/06(金) 16:33:48.63
ある関数において長さが不確定の値を配列に受け取り
配列の反復子を関数に渡してそれに入れてもらうと仮定した場合
配列の大きさが前もってわかってないので十分な大きさを確保する必要があると考えますが
これは不合理と理解しますのでソリューションをご教示ください。
配列の反復子を関数に渡してそれに入れてもらうと仮定した場合
配列の大きさが前もってわかってないので十分な大きさを確保する必要があると考えますが
これは不合理と理解しますのでソリューションをご教示ください。
512 :デフォルトの名無しさん2011/05/06(金) 17:49:37.15
メモリー解放すぐ忘れちゃうんで
使い終わったら勝手に消えてくれるイテレーターがあると助かるんだけど。
使い終わったら勝手に消えてくれるイテレーターがあると助かるんだけど。
513 :デフォルトの名無しさん2011/05/06(金) 17:55:19.63
必要に応じて領域を確保していく出力反復子的なものを作って渡せばいいんじゃない
515 :デフォルトの名無しさん2011/05/06(金) 18:13:32.59
http://codepad.org/pJvvXAhu
仕様的にこのようにlistの走査中に削除や追加をしていいのだろうか?
仕様的にこのようにlistの走査中に削除や追加をしていいのだろうか?
520 :デフォルトの名無しさん2011/05/07(土) 09:22:56.32
>>515
一般的なlistの実装なら問題ないのかな
これがvectorだったら再確保された場合イテレーターが死ぬから無理だけど
仕様で許可されてるのかどうかまではわからないな
一般的なlistの実装なら問題ないのかな
これがvectorだったら再確保された場合イテレーターが死ぬから無理だけど
仕様で許可されてるのかどうかまではわからないな
516 :デフォルトの名無しさん2011/05/06(金) 18:18:20.28
listだから問題ないだろ
一つ一つの手続きに問題が無いんだし
一つ一つの手続きに問題が無いんだし
521 :デフォルトの名無しさん2011/05/07(土) 10:29:04.37
つ規格書
listコンテナのmodifier (23.2.2.3)
insert,push_front,push_back はイテレータや参照の有効性に影響を及ぼさない。(p1)
erase,pop_font,pop_back,clear は削除される要素へのイテレータや参照だけ無効になる。(p3)
listコンテナのmodifier (23.2.2.3)
insert,push_front,push_back はイテレータや参照の有効性に影響を及ぼさない。(p1)
erase,pop_font,pop_back,clear は削除される要素へのイテレータや参照だけ無効になる。(p3)
522 :デフォルトの名無しさん2011/05/07(土) 12:09:13.01
https://gist.github.com/960160
void solve(vector <pair<string, int> >& h){}
この様な "ペアを内包したベクタへの参照を引数に取る関数" を定義したいです。でも出来ません。
「invalid initialization of non-const reference of type…」とコンパイラに怒られます。
現状は
void solve(const vector<pair<string, int> >* h){}
としています。お教え頂けませんか?
void solve(vector <pair<string, int> >& h){}
この様な "ペアを内包したベクタへの参照を引数に取る関数" を定義したいです。でも出来ません。
「invalid initialization of non-const reference of type…」とコンパイラに怒られます。
現状は
void solve(const vector<pair<string, int> >* h){}
としています。お教え頂けませんか?
524 :デフォルトの名無しさん2011/05/07(土) 12:22:36.45
>>522
const
const
526 :デフォルトの名無しさん2011/05/07(土) 13:16:57.37
>>522
gcc4.5.2(MinGW)では普通に通るが
typedef std::vector<std::pair<std::string, int> > Vpsi;
void solve(Vpsi& h)
{
for (Vpsi::const_iterator pos = h.begin(); pos != h.end(); ++pos)
std::cout << "String = \"" << pos->first << ", int = " << pos->second << std::endl;
}
int main()
{
Vpsi v;
v.push_back(std::make_pair(std::string("abc"), 1));
v.push_back(std::make_pair(std::string("def"), 2));
solve(v);
std::cin.get();
}
gcc4.5.2(MinGW)では普通に通るが
typedef std::vector<std::pair<std::string, int> > Vpsi;
void solve(Vpsi& h)
{
for (Vpsi::const_iterator pos = h.begin(); pos != h.end(); ++pos)
std::cout << "String = \"" << pos->first << ", int = " << pos->second << std::endl;
}
int main()
{
Vpsi v;
v.push_back(std::make_pair(std::string("abc"), 1));
v.push_back(std::make_pair(std::string("def"), 2));
solve(v);
std::cin.get();
}
530 :デフォルトの名無しさん2011/05/07(土) 14:14:08.99
>>526
関数定義が構造体(貴殿のでいうVpsi)の参照渡しなのに、アドレス渡してcallしてました。
呼び出す方のミスでした。アホだった。ありがとうございました。
>>524
const は記載ミスでした。関係有りませんでした。すみません、ありがとうございます。
関数定義が構造体(貴殿のでいうVpsi)の参照渡しなのに、アドレス渡してcallしてました。
呼び出す方のミスでした。アホだった。ありがとうございました。
>>524
const は記載ミスでした。関係有りませんでした。すみません、ありがとうございます。
527 :デフォルトの名無しさん2011/05/07(土) 13:38:25.91
構造体の配列をコピーするのですが、
memcpy_s でコピーして問題ありますか?
次のような構造体のときmemset()で0初期化すると
整数型0と挙動小数点0.0f, 0.0dの区別の関係で問題があると
きいて懸念ができたので聞いておきたいのです。
struct A
{
char c;
int i;
float f;
double d;
};
memcpy_s でコピーして問題ありますか?
次のような構造体のときmemset()で0初期化すると
整数型0と挙動小数点0.0f, 0.0dの区別の関係で問題があると
きいて懸念ができたので聞いておきたいのです。
struct A
{
char c;
int i;
float f;
double d;
};
531 :デフォルトの名無しさん2011/05/07(土) 14:26:48.76
>>527
注意する点は、
「C++の仕様内で整数型および浮動小数点数型の内部表現が定まってない事」
「バイト単位によるコピー、セットに伴うアラインメント」
「A自体がPODかどうか」
それぞれぐぐれば出てくる。
まぁ、AはPODだしアラインメントは::operator new使えば関係ないし
整数型の内部表現も二進数で1バイトのbit数も8だろうし
浮動小数点数規格IEEE 754, 854は全てのデータが0であると+0として認識されるから
その時点ではそれらの関数を使うことに対して全く問題はない。
注意する点は、
「C++の仕様内で整数型および浮動小数点数型の内部表現が定まってない事」
「バイト単位によるコピー、セットに伴うアラインメント」
「A自体がPODかどうか」
それぞれぐぐれば出てくる。
まぁ、AはPODだしアラインメントは::operator new使えば関係ないし
整数型の内部表現も二進数で1バイトのbit数も8だろうし
浮動小数点数規格IEEE 754, 854は全てのデータが0であると+0として認識されるから
その時点ではそれらの関数を使うことに対して全く問題はない。
529 :デフォルトの名無しさん2011/05/07(土) 13:52:47.05
>523 C++03の日本語版X3014ならJISCのサイトで閲覧できる
533 :5272011/05/07(土) 17:31:50.00
ありがとう。
でもアライメントはsizeofで構造体サイズを指定すればいんじゃない?
でもアライメントはsizeofで構造体サイズを指定すればいんじゃない?
534 :デフォルトの名無しさん2011/05/07(土) 20:23:26.98
よくあるタイプの処理系だとdoubleのサイズが最大のアライメントになるから
構造体サイズをアライメントに採用すると間違いではないけど無駄が多くなる
構造体サイズをアライメントに採用すると間違いではないけど無駄が多くなる
535 :デフォルトの名無しさん2011/05/07(土) 22:31:08.50
STLがアロケーターに要求しているmax_sizeって、メモリが無限にあると仮定して
1 現在において一度に取得可能な数
2 最も良い状況での取得可能な数
のどっちでしょうか?
1 現在において一度に取得可能な数
2 最も良い状況での取得可能な数
のどっちでしょうか?
539 :デフォルトの名無しさん2011/05/08(日) 21:42:53.33
>>535
論理的に確保可能な要素の数。
論理的に確保可能な要素の数。
536 :デフォルトの名無しさん2011/05/07(土) 22:46:21.51
無限のメモリをアドレッシングするには無限長アドレスが必要だけど、
そんなCPUアーキテクチャは存在しない。バカな質問するな。
そんなCPUアーキテクチャは存在しない。バカな質問するな。
537 :デフォルトの名無しさん2011/05/07(土) 22:51:13.86
>>536
仮定って言ってるだろ
空きメモリの限界に引っかかる場合を除いてって意味でしょうに
仮定って言ってるだろ
空きメモリの限界に引っかかる場合を除いてって意味でしょうに
540 :デフォルトの名無しさん2011/05/09(月) 05:19:28.20
C++でAの処理が終わったら主処理ループn回分待機してからBの処理、
Bの処理が終わったら主処理ループm回分待機してからCの処理
のような仕組みをカウンタの変数用意して回すのが嫌で嫌でなりません
どうにかしてC++でマイクロスレッドやコルーチンを用いる方法はないでしょうか
Bの処理が終わったら主処理ループm回分待機してからCの処理
のような仕組みをカウンタの変数用意して回すのが嫌で嫌でなりません
どうにかしてC++でマイクロスレッドやコルーチンを用いる方法はないでしょうか
545 :デフォルトの名無しさん2011/05/09(月) 15:59:54.51
541 :デフォルトの名無しさん2011/05/09(月) 06:40:07.93
手段を問わないんならコルーチン実装したライブラリ使えばいいだけじゃないのか
542 :デフォルトの名無しさん2011/05/09(月) 10:36:46.35
AMD64が主流になってもLLP64じゃsizeof(size_t)==sizeof(unsigned long)==32bitだしなあ
欠陥を感じずにはいられない
なぜLP64またはILP64にしなかったのか
まあWin64を直接コールすれば関係ないが
C/C++を軽視したモデルと言わざるを得ない
もちろんメモリスペースの問題からintは現行の32ビットでも十分だ
size_tをlong long intにすればいいのに
あれ?でもMSDNには
>int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。
>64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインタを 32 ビット
>変数に割り当てないように注意してください。ポインタは、64 ビットのプラットフォームでは 64 ビット
>なので、ポインタを 32 ビット変数に割り当てると、ポインタ値を切り捨てることになります。
>size_t、time_t、および ptrdiff_t は、64 ビット Windows オペレーティング システムでは 64 ビット値です。
>time_t は、Visual C++ 2005 以前の Visual C++ バージョンの 32 ビット Windows オペレーティング
>システムでは 32 ビット値です。Visual C++ 2005 以降では、time_t は既定で 64 ビットの整数です。
>詳細については、「時間管理」を参照してください。
と書いてあるぞ???
欠陥を感じずにはいられない
なぜ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 ビットの整数です。
>詳細については、「時間管理」を参照してください。
と書いてあるぞ???
547 :デフォルトの名無しさん2011/05/09(月) 16:06:25.58
全体を while (1) { 〜 } で囲んで繰り返しにしているのでそういう動きになります
549 :デフォルトの名無しさん2011/05/09(月) 16:23:19.38
自分がコンピューターになったつもりでc,endに何が入っているか追跡してみなよ。
552 :デフォルトの名無しさん2011/05/09(月) 18:12:36.07
getcharもendも意味が分かりました。
しかし、
if(c != \n);
break;
がどうもダメです。
文字がエンターと等しくない事がどうしてwhileループを抜けるになるんでしょうか?
aを押したあと、エンター押しますよね普通。
xを押せば終了ですが、aだと終わることなくループしますし。
つまりwhileループは抜けないことになるかと思います。
しかし、
if(c != \n);
break;
がどうもダメです。
文字がエンターと等しくない事がどうしてwhileループを抜けるになるんでしょうか?
aを押したあと、エンター押しますよね普通。
xを押せば終了ですが、aだと終わることなくループしますし。
つまりwhileループは抜けないことになるかと思います。
553 :デフォルトの名無しさん2011/05/09(月) 18:19:30.30
>>552
while(1) は2つあるだろ
printf から switch 文まで全体を囲ってる外側の while(1) と、getchar と if 文だけを囲ってる内側の while(1)
そこの break で抜けるのは内側の while(1) だよ
while(1) は2つあるだろ
printf から switch 文まで全体を囲ってる外側の while(1) と、getchar と if 文だけを囲ってる内側の while(1)
そこの break で抜けるのは内側の while(1) だよ
554 :デフォルトの名無しさん2011/05/09(月) 23:04:22.40
コンパイルすると九九が出力されるソースです。
iがjより大きいコンティニューになるようですが、どうみればいいのでしょうか?
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
if(i > j)
continue;
printf("%d×%d = %2d\n", i,j,i*j);
}
printf("---------------------\n");
}
return 0;
}
iがjより大きいコンティニューになるようですが、どうみればいいのでしょうか?
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
if(i > j)
continue;
printf("%d×%d = %2d\n", i,j,i*j);
}
printf("---------------------\n");
}
return 0;
}
555 :デフォルトの名無しさん2011/05/09(月) 23:57:39.95
>>554
i<=jのときだけそこのループ処理を行う
i<=jのときだけそこのループ処理を行う
558 :デフォルトの名無しさん2011/05/10(火) 01:12:34.78
>>555
もうちょい詳しくお願いします
iとjがインクリメントで1つづ増えてそれが9までいくってのはわかります
しかしi>jが何を意味すんのか、それによって何がどうなるかがイマイチ分かりません
もうちょい詳しくお願いします
iとjがインクリメントで1つづ増えてそれが9までいくってのはわかります
しかしi>jが何を意味すんのか、それによって何がどうなるかがイマイチ分かりません
559 :デフォルトの名無しさん2011/05/10(火) 01:15:09.64
>>558
iがインクリメントされるタイミングわかる?
iがインクリメントされるタイミングわかる?
561 :デフォルトの名無しさん2011/05/10(火) 01:22:51.64
>>559
iがjより大きいときですか?
iがjより大きいときですか?
563 :デフォルトの名無しさん2011/05/10(火) 01:31:20.92
>>554を出力すると以下のようになるわけですが、iのほうはずっと1のままで、jは
2,3,4・・・インクリメントされてます。
でjが9に達したところで、iが2になってるのです
こうなるのはforとかifがどういうタイミングで働いてるのかがどうもつかめません
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
・
・
・
略
2,3,4・・・インクリメントされてます。
でjが9に達したところで、iが2になってるのです
こうなるのはforとかifがどういうタイミングで働いてるのかがどうもつかめません
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
・
・
・
略
564 :デフォルトの名無しさん2011/05/10(火) 01:38:49.07
>>563
ちゃんと自動でインデントしてくれるエディタ使ってる?
そしてfor文について理解してる?
ちゃんと自動でインデントしてくれるエディタ使ってる?
そしてfor文について理解してる?
565 :デフォルトの名無しさん2011/05/10(火) 01:42:08.79
>>564
forはほぼばっちりです。
forはほぼばっちりです。
566 :デフォルトの名無しさん2011/05/10(火) 01:44:58.93
>>563
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
printf("(i, j)=(%d, %d)\n",i,j);
}
}
return 0;
}
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
}
printf("(i, j)=(%d, %d)\n",i,j);
}
return 0;
}
#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;
}
556 :デフォルトの名無しさん2011/05/10(火) 00:45:39.25
CとC++どっちが強いですか?
562 :デフォルトの名無しさん2011/05/10(火) 01:25:29.36
568 : ◆6W4srb4nmo 2011/05/10(火) 03:10:20.81
/*
http://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;
}
http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/017.html#continue
if(i > j) continue;
は、もし、jがiより小さいか等しいなら、内側のループの最後まで飛び越す。次はj++
*/
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i++){
for(j = 1; j < 10; j++){
/* if(i > j)
continue;
printf("%d×%d = %2d\n", i,j,i*j);
*/
if(i <= j)
printf("%d×%d = %2d\n", i,j,i*j);
}
printf("---------------------\n");
}
return 0;
}
569 :デフォルトの名無しさん2011/05/10(火) 19:35:17.14
typeidの情報ってtypeidを一度も使ってないクラスのデータも取られる?
かかるコストはコンパイル時にtypeid使ってるクラスの分だけ?
かかるコストはコンパイル時にtypeid使ってるクラスの分だけ?
570 :デフォルトの名無しさん2011/05/11(水) 00:34:10.88
RTTIを有効にしたら全部だろう。
リンカあたりが取り除いてくれる最適化があるのか?
もっとも今時のPCなら、全部作られたとしても、そう大したコストではないとは思うが。
リンカあたりが取り除いてくれる最適化があるのか?
もっとも今時のPCなら、全部作られたとしても、そう大したコストではないとは思うが。
571 :デフォルトの名無しさん2011/05/11(水) 02:57:06.85
全部のクラスでやってたらテンプレートであれこれするとすごい無駄になりそう
572 :デフォルトの名無しさん2011/05/11(水) 12:38:25.51
文字列定数同士の比較ってstrcmpを使わなくてもポインタの値が等しいかで問題ないですか?
575 :デフォルトの名無しさん2011/05/11(水) 13:35:03.57
>>572
あります。文字列リテラルを同じ空間に確保するかどうかは環境依存です。
あります。文字列リテラルを同じ空間に確保するかどうかは環境依存です。
576 :デフォルトの名無しさん2011/05/11(水) 15:14:46.74
インターフェースを追加するだけのクラス継承(メンバ変数を一つも持たない)ならスライシングが起こってもなんら問題ないよね?
577 :デフォルトの名無しさん2011/05/12(木) 17:25:51.36
C++の質問。
SuperClass* pSuper p = new SubClass();
SubClass pSub = (SubClass)p;
このようにダウンキャストするときにdynamic_castを使わず
C言語ライクにキャストするとキャストコストがない、で正しいでしょうか?
>>576
仮想関数があるとサイズに違いがでるよ。
SuperClass* pSuper p = new SubClass();
SubClass pSub = (SubClass)p;
このようにダウンキャストするときにdynamic_castを使わず
C言語ライクにキャストするとキャストコストがない、で正しいでしょうか?
>>576
仮想関数があるとサイズに違いがでるよ。
578 :デフォルトの名無しさん2011/05/12(木) 17:45:47.09
>>577
演算子オーバーロードは問題外として
仮想関数関係のアレはC形式のキャストでもちゃんとやるよ
演算子オーバーロードは問題外として
仮想関数関係のアレはC形式のキャストでもちゃんとやるよ
579 :469 2011/05/12(木) 19:45:23.61
>>577
Cスタイルキャストはオススメしない。コードが不明瞭になる
絶対キャストが成功する保障があるなら
static_castを使いましょう
boost使えるならpolymorphic_downcastをオススメ
Cスタイルキャストはオススメしない。コードが不明瞭になる
絶対キャストが成功する保障があるなら
static_castを使いましょう
boost使えるならpolymorphic_downcastをオススメ
581 :デフォルトの名無しさん2011/05/12(木) 22:16:42.49
ポインタの場合はreinterpret_castもありますけど
static_castの方は実行時ではなくコンパイル時ですね。
ありがとうございます。
static_castの方は実行時ではなくコンパイル時ですね。
ありがとうございます。
582 :デフォルトの名無しさん2011/05/13(金) 00:38:27.80
C++やっているけどいまだにオブジェクト指向ってのが何なのか分かっていない
584 :デフォルトの名無しさん2011/05/13(金) 00:56:02.33
>>582
手続き型の言語に手を出すといいよ
手続き型の言語に手を出すといいよ
583 :デフォルトの名無しさん2011/05/13(金) 00:42:29.93
実行時のキャストコストって、CスタイルとC++スタイルで同じじゃないの?
586 :デフォルトの名無しさん2011/05/13(金) 20:44:52.19
C++の
<<
>>
ってかわいいよね
<<
>>
ってかわいいよね
588 :デフォルトの名無しさん2011/05/14(土) 03:10:16.10
コンストラクタから
仮想メンバ関数は呼んではいけなかったんでしたっけ?
基底クラスの非仮想メンバ関数は呼んでいいんでしたっけ?
教えてくださいお願いします
仮想メンバ関数は呼んではいけなかったんでしたっけ?
基底クラスの非仮想メンバ関数は呼んでいいんでしたっけ?
教えてくださいお願いします
589 :デフォルトの名無しさん2011/05/14(土) 04:22:17.45
コンストラクタで仮想関数を呼ぶと
オーバーライドされていても親クラスの関数が呼ばれる
オーバーライドされていても親クラスの関数が呼ばれる
590 :デフォルトの名無しさん2011/05/14(土) 14:40:10.68
親から順番にコンストラクトされる仕様だから
親がコンストラクトされる前に子のメンバ関数を呼び出せてしまうとやばい
子の準備前に呼ばれるわけだからね
親がコンストラクトされる前に子のメンバ関数を呼び出せてしまうとやばい
子の準備前に呼ばれるわけだからね
591 :デフォルトの名無しさん2011/05/14(土) 14:55:30.91
>>590
親のコンストラクタから子のメンバ関数って呼べるんですか?
親のコンストラクタからメンバ関数を呼ぶと普通に其のクラスのメンバ関数(さらに親はいないとして)が呼ばれるみたいなんですが
親のコンストラクタから子のメンバ関数って呼べるんですか?
親のコンストラクタからメンバ関数を呼ぶと普通に其のクラスのメンバ関数(さらに親はいないとして)が呼ばれるみたいなんですが
592 :デフォルトの名無しさん2011/05/14(土) 15:06:05.73
呼び出せてしまうとやばいから、呼ばれないようになっている
593 :デフォルトの名無しさん2011/05/14(土) 15:07:59.11
>>592
ですよね
みなさん参考になりました
どうもありがとうございました
ですよね
みなさん参考になりました
どうもありがとうございました
595 :デフォルトの名無しさん2011/05/15(日) 01:15:06.08
C++を知ってしまうとCなんて馬鹿らしくてやってられないよな;;
596 :デフォルトの名無しさん2011/05/15(日) 01:31:05.73
C++の前にCをやれって言われてるのは、文法を解説してるC++のサイトや書籍が少ないからなんだよな
ほんと今から触れる人はCすっとばしてC++触るべきだと思うわ
ほんと今から触れる人はCすっとばしてC++触るべきだと思うわ
597 :デフォルトの名無しさん2011/05/15(日) 01:33:37.57
さらにC++03すっ飛ばしていきなりC++0xの機能使ったりSTLより先にboostとか触るべきだわ
598 :デフォルトの名無しさん2011/05/15(日) 01:37:43.22
STLガンガンつかってるけどboost使ったことないわ
環境構築が居るってのが抵抗ある
環境構築が居るってのが抵抗ある
599 :uy2011/05/15(日) 02:36:23.56
Boostとか、別にただのライブラリなので自分でかいたって良い。
たいしたものは存在してない
lambda? スマートポインタ?
自分でかけよ
自分でその程度の機能すらかけないゴミカスが、ライブラリに頼る時に使う機構をBoostと呼ぶ
そしてC++で出来る事は実は、やろうとすりゃCでも出来るので、
現在のITの世界の互換性っていう観点からみると、
C++よりもCを極めたほうが、広い世界を見ることが出来る
Cにしろ、C++にしろ、いずれ、マシなコンパイラ言語が世の中に出てくるはずなので
そのときに、いずれ両方とも消え去る
Cは時代遅れ、C++は、時代遅れではないけれど記述が冗長すぎて、
この言語は、使っていけません、ただの芸術作品です
情報技術のお部屋に未来永劫飾っておく言語、C#、JAVAよりは偉いよC++。
Cの次くらいに、偉い
C++は初心者の学習用言語にむいてる
生半可な力で使っていける言語ではないという点が、学習用途にはとても良い材料ではある
その苦境を超えてこれるなら、よきプログラマになれるだろう
そのままC++を使い続けるプログラマになったとしても、
C++から別言語に移ったとしても、C++を( その気になれば )かける奴というのは
根が強い。
言語というそのものへの理解が、深いといえる
ゴミグラマは死ね
たいしたものは存在してない
lambda? スマートポインタ?
自分でかけよ
自分でその程度の機能すらかけないゴミカスが、ライブラリに頼る時に使う機構をBoostと呼ぶ
そしてC++で出来る事は実は、やろうとすりゃCでも出来るので、
現在のITの世界の互換性っていう観点からみると、
C++よりもCを極めたほうが、広い世界を見ることが出来る
Cにしろ、C++にしろ、いずれ、マシなコンパイラ言語が世の中に出てくるはずなので
そのときに、いずれ両方とも消え去る
Cは時代遅れ、C++は、時代遅れではないけれど記述が冗長すぎて、
この言語は、使っていけません、ただの芸術作品です
情報技術のお部屋に未来永劫飾っておく言語、C#、JAVAよりは偉いよC++。
Cの次くらいに、偉い
C++は初心者の学習用言語にむいてる
生半可な力で使っていける言語ではないという点が、学習用途にはとても良い材料ではある
その苦境を超えてこれるなら、よきプログラマになれるだろう
そのままC++を使い続けるプログラマになったとしても、
C++から別言語に移ったとしても、C++を( その気になれば )かける奴というのは
根が強い。
言語というそのものへの理解が、深いといえる
ゴミグラマは死ね
600 :デフォルトの名無しさん2011/05/15(日) 02:39:16.30
>>599
死ねゴミ
死ねゴミ
601 :uy2011/05/15(日) 02:39:56.84
>>600
よおゴミ^^
よおゴミ^^
603 :デフォルトの名無しさん2011/05/15(日) 02:52:16.47
>>601-602
死ねゴミ
死ねゴミ
607 :uy2011/05/15(日) 05:05:34.61
>>603
お前が死ね ゴミグラマ
お前が死ね ゴミグラマ
608 :デフォルトの名無しさん2011/05/15(日) 08:44:14.07
>>607
死ねゴミ
死ねゴミ
613 :uy2011/05/16(月) 07:52:46.15
>>608
お前が死ね
お前が死ね
614 :デフォルトの名無しさん2011/05/16(月) 11:25:07.85
>>613
お前が死ね
お前が死ね
615 :デフォルトの名無しさん2011/05/16(月) 12:28:17.12
>>614
お前が死ね
お前が死ね
616 :デフォルトの名無しさん2011/05/16(月) 12:39:18.70
>>613-616
全員死ね
全員死ね
617 :デフォルトの名無しさん2011/05/16(月) 12:41:34.17
>>616
お前が死ね
お前が死ね
618 :デフォルトの名無しさん2011/05/16(月) 13:14:13.55
>>615
お前が死ね
お前が死ね
602 :uy2011/05/15(日) 02:40:39.85
いっとくけど、すいとんしても無駄だからな
ブラウザ5つもって全てのクッキーがレベル6以上なので、1個潰されたくらいなんともないので^^;;;;
ブラウザ5つもって全てのクッキーがレベル6以上なので、1個潰されたくらいなんともないので^^;;;;
604 :デフォルトの名無しさん2011/05/15(日) 03:14:08.73
ゲーム作るために速度が欲しいからC++って人もいるだろう
プリミティブが多いゲームだとC#じゃ速さが足りない
プリミティブが多いゲームだとC#じゃ速さが足りない
605 :デフォルトの名無しさん2011/05/15(日) 04:11:10.08
俺は案件が要求する言語を使うが、そうでないやつがあれがいいこれがいいって言ってるんだろ?
606 :デフォルトの名無しさん2011/05/15(日) 04:13:24.29
プリミティブじゃねぇよパーティクルだよ!あぁ恥ずかしい!
609 :デフォルトの名無しさん2011/05/15(日) 09:34:01.17
ゴミという単語をNGにしようと思ったけど
それじゃGCネタとかメモリ管理ネタが誤爆で見えなくなりそうだし困ったものだ
それじゃGCネタとかメモリ管理ネタが誤爆で見えなくなりそうだし困ったものだ
610 :デフォルトの名無しさん2011/05/15(日) 10:35:04.63
>>609
uyをNGネームに指定してあとは連鎖で
uyをNGネームに指定してあとは連鎖で
611 :デフォルトの名無しさん2011/05/16(月) 00:25:12.92
C++でクラスのメンバとしてchar型の文字列を扱う方法はありますか?
おねがいします。こんな感じで書いてみたんですが、案の定ダメでして。
class hoge
{
char hogehoge;
public:
char getHogeHoge()
{
return hogehoge;
}
char setHogeHoge(char value)
{
hogehoge = value;
}
}
おねがいします。こんな感じで書いてみたんですが、案の定ダメでして。
class hoge
{
char hogehoge;
public:
char getHogeHoge()
{
return hogehoge;
}
char setHogeHoge(char value)
{
hogehoge = value;
}
}
612 :デフォルトの名無しさん2011/05/16(月) 00:29:51.81
>>611
class hoge
{
char hogehoge[256];
public:
char* getHogeHoge(char* value)
{
strcpy(value, hogehoge);
return value;
}
void setHogeHoge(const char* value)
{
strcpy(hogehoge, value);
}
}
class hoge
{
char hogehoge[256];
public:
char* getHogeHoge(char* value)
{
strcpy(value, hogehoge);
return value;
}
void setHogeHoge(const char* value)
{
strcpy(hogehoge, value);
}
}
623 :デフォルトの名無しさん2011/05/18(水) 14:02:29.70
例外処理について教えていただきたいのですが、他の人が作ったソースの修正を行います。
__try{}文を見つけました、これをC++のtry{}catch()に変更したいのですが、特に問題ないでしょうか?
環境は、windowsのアプリです。
__try{}文を見つけました、これをC++のtry{}catch()に変更したいのですが、特に問題ないでしょうか?
環境は、windowsのアプリです。
624 :デフォルトの名無しさん2011/05/18(水) 14:04:11.34
>>623
だめだよwwwwwww
それはそれぞれ全然違うものだ
だめだよwwwwwww
それはそれぞれ全然違うものだ
626 :デフォルトの名無しさん2011/05/18(水) 14:30:06.78
win32構造化例外でぐぐればなんとなくは分かるはず
てゆーか何で書き換えたいの?
てゆーか何で書き換えたいの?
627 :デフォルトの名無しさん2011/05/18(水) 20:09:40.63
現在VC++から変数の値をVBに渡してVBで処理するプログラムを作成しています。
VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
http://www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm
を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。
VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
http://www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm
を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。
630 :デフォルトの名無しさん2011/05/19(木) 20:00:37.39
Cがちゃんとしたオブジェクト指向を提供しないからC++やらないといけないよね;;
631 :デフォルトの名無しさん2011/05/19(木) 20:45:37.91
C++が「ちゃんとした」オブジェクト指向かどうかは微妙だけどな
633 :デフォルトの名無しさん2011/05/20(金) 17:32:09.73
CとC++の違いを教えてください。、
634 :デフォルトの名無しさん2011/05/20(金) 17:36:35.19
>>633
使えるライブラリが違います
C++ではboost使えますが、Cでは使えません。
使えるライブラリが違います
C++ではboost使えますが、Cでは使えません。
635 :デフォルトの名無しさん2011/05/20(金) 17:54:11.54
>>634
あっ。て事はCの後はC++でほぼ同じ内容を違う言葉で覚え直す感じでしょうか?
あっ。て事はCの後はC++でほぼ同じ内容を違う言葉で覚え直す感じでしょうか?
637 :デフォルトの名無しさん2011/05/20(金) 18:02:49.14
ありゃ。
wikiは参考にさせていただきます。
ありがとうございます。
wikiは参考にさせていただきます。
ありがとうございます。
638 :デフォルトの名無しさん2011/05/20(金) 18:06:44.37
うむ。
人に聞いてわかるほど単純じゃないな。
全部、一から勉強しよう。
人に聞いてわかるほど単純じゃないな。
全部、一から勉強しよう。
643 :デフォルトの名無しさん2011/05/21(土) 23:29:00.28
VC++ 2010でzlibのlibファイルを作ろうとしているのですが、
大量のfatal errorを吐かれてコンパイルできません。
zlib\adler32.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。
zlib\compress.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。
以下略
手順は
1.プロジェクトは新規作成->Win32 コンソールアプリケーション
2.表示されたウィンドウのスタティックライブラリを選択して完了
3.zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる
4.既存のファイルから.cと.hを追加し、Releaceでコンパイル
プリコンパイル済みヘッダを消してみたり、stdafx.hなどを消してみたり色々試したのですが、
他のエラーを吐き始めるので先に進みません。
宜しくお願いします。
大量の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などを消してみたり色々試したのですが、
他のエラーを吐き始めるので先に進みません。
宜しくお願いします。
645 :デフォルトの名無しさん2011/05/22(日) 01:00:28.24
>>643
暇なので試してみた
1、プロジェクトは新規作成->Win32 コンソールアプリケーション
プロジェクト名はzlib(zlib1でもなんでもいいけど),ソリューションのディレクトリを作成にチェック
2、表示されたウィンドウの"スタティックライブラリ"および"空のプロジェクト" を選択し完了
3、 zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる
4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
4996を除けばエラー0、警告0
動作確認方法は
同ソリューションに
コンソールアプリケーションプロジェクトを追加し
exsample.cを追加
$(OUTDIR)\zlib.libをリンクしコンパイル
こちらも4996を除けばエラー0、警告0
実行しても問題はない模様
>4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
この行は適当だから他のメイクファイルを参考に確認したほうがいいかも
暇なので試してみた
1、プロジェクトは新規作成->Win32 コンソールアプリケーション
プロジェクト名はzlib(zlib1でもなんでもいいけど),ソリューションのディレクトリを作成にチェック
2、表示されたウィンドウの"スタティックライブラリ"および"空のプロジェクト" を選択し完了
3、 zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる
4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
4996を除けばエラー0、警告0
動作確認方法は
同ソリューションに
コンソールアプリケーションプロジェクトを追加し
exsample.cを追加
$(OUTDIR)\zlib.libをリンクしコンパイル
こちらも4996を除けばエラー0、警告0
実行しても問題はない模様
>4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル
この行は適当だから他のメイクファイルを参考に確認したほうがいいかも
646 :デフォルトの名無しさん2011/05/22(日) 01:39:12.77
>>645
2度ほど、慎重にやってみましたがエラーの内容は変わりません。
もしかすると、と思いfatal errorの内容で調べてみたら
プリコンパイル済みヘッダを使用しない、/Tcオプションを付ける、などで対処できるらしいと聞きました。
そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
プリコンパイル済みヘッダーの項目を使用しないに変更しました。
また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
コンパイル言語の選択をCコードとしてコンパイルを選択、
プロジェクトをクリーンしてビルドしました。
ビルドは通りました。.libも作成されています。ログを載せておきます。
http://www.dotup.org/uploda/www.dotup.org1657702.log.html
半分自己解決したようなものでお手を煩わせてすみません……。
ありがとうございました。
2度ほど、慎重にやってみましたがエラーの内容は変わりません。
もしかすると、と思いfatal errorの内容で調べてみたら
プリコンパイル済みヘッダを使用しない、/Tcオプションを付ける、などで対処できるらしいと聞きました。
そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
プリコンパイル済みヘッダーの項目を使用しないに変更しました。
また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
コンパイル言語の選択をCコードとしてコンパイルを選択、
プロジェクトをクリーンしてビルドしました。
ビルドは通りました。.libも作成されています。ログを載せておきます。
http://www.dotup.org/uploda/www.dotup.org1657702.log.html
半分自己解決したようなものでお手を煩わせてすみません……。
ありがとうございました。
644 :デフォルトの名無しさん2011/05/22(日) 00:20:15.73
.hをコンパイルしている悪寒。つーか、VSスレにでも逝ったら?
647 :デフォルトの名無しさん2011/05/22(日) 02:18:22.21
> そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、
> プリコンパイル済みヘッダーの項目を使用しないに変更しました。
"スタティックライブラリ"の場合はそうだね、すまん
> また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
> コンパイル言語の選択をCコードとしてコンパイルを選択、
拡張子が*.cならCコードとしてコンパイルされるのが
デフォルトの動作なので意味無いよ
> プリコンパイル済みヘッダーの項目を使用しないに変更しました。
"スタティックライブラリ"の場合はそうだね、すまん
> また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、
> コンパイル言語の選択をCコードとしてコンパイルを選択、
拡張子が*.cならCコードとしてコンパイルされるのが
デフォルトの動作なので意味無いよ
648 :デフォルトの名無しさん2011/05/22(日) 03:51:49.25
C++で独自のクラスAを格納するベクターコンテナ(STL)があったとき、
Aのoperator==は、フレンドで、グローバルに定義しないといけないの?
Aのoperator==は、フレンドで、グローバルに定義しないといけないの?
651 :デフォルトの名無しさん2011/05/22(日) 15:08:08.45
>>648
なぜ?
なぜ?
653 :デフォルトの名無しさん2011/05/22(日) 16:22:54.39
655 :デフォルトの名無しさん2011/05/22(日) 16:39:36.63
>>653
あ、コンパイル通った……
通らなかったときは何してたんだ……
サンクス
あ、コンパイル通った……
通らなかったときは何してたんだ……
サンクス
649 :デフォルトの名無しさん2011/05/22(日) 11:03:07.01
例外はオブジェクト指向、特にカプセル化と相性が最悪な気がするんですがどうでしょうか?
せっかく実装を隠ぺいしたのに実装に依存して例外処理を書き換えないといけないなんて不愉快ですよね
せっかく実装を隠ぺいしたのに実装に依存して例外処理を書き換えないといけないなんて不愉快ですよね
652 :デフォルトの名無しさん2011/05/22(日) 15:16:10.20
>>649
例外処理を実装に依存して書き換えるって、意味がよくわからないんだが。
それは例外処理の中身によるだろうし、もしそこが実装依存にしか書けない
エラー処理なら、それは例外処理を利用しなくても実装依存にしか書けないんじゃないのかな?
例外処理を実装に依存して書き換えるって、意味がよくわからないんだが。
それは例外処理の中身によるだろうし、もしそこが実装依存にしか書けない
エラー処理なら、それは例外処理を利用しなくても実装依存にしか書けないんじゃないのかな?
654 :デフォルトの名無しさん2011/05/22(日) 16:30:46.19
>>652
例えばもともとnothrowだったメソッドが実装変更で例外投げる仕様になったら困るだろ
中身は意識しなくていいのがカプセル化のメリットなのに
これでは何を投げるかドキュメントやソースを常にチェックしないといけない
そして変更があったらクライアントコードすべてを調べなければならない
例外のせいでカプセル化台無し。こんなバカな仕様があってたまるかってこと
例えばもともとnothrowだったメソッドが実装変更で例外投げる仕様になったら困るだろ
中身は意識しなくていいのがカプセル化のメリットなのに
これでは何を投げるかドキュメントやソースを常にチェックしないといけない
そして変更があったらクライアントコードすべてを調べなければならない
例外のせいでカプセル化台無し。こんなバカな仕様があってたまるかってこと
659 :デフォルトの名無しさん2011/05/22(日) 20:16:22.38
>>654
それは言語仕様というより、設計の問題では。
それは言語仕様というより、設計の問題では。
656 :デフォルトの名無しさん2011/05/22(日) 18:21:43.32
#include <stdio.h>
struct Man {
char name[32];
int age;
}
int main()
{
struct Man student;
strcpy(student.name, "山田太郎");
student.age = 16;
printf("生徒の名前は%dです\n", student.name);
printf("年は%d歳です\n", student.age);
return 0;
}
このソースのstrcpyの所に赤波線が出て、マウスを乗せると識別子"strcpy"が定義されていませんと出ます。
どうすればいいのでしょうか?
win7・VC++です
struct Man {
char name[32];
int age;
}
int main()
{
struct Man student;
strcpy(student.name, "山田太郎");
student.age = 16;
printf("生徒の名前は%dです\n", student.name);
printf("年は%d歳です\n", student.age);
return 0;
}
このソースのstrcpyの所に赤波線が出て、マウスを乗せると識別子"strcpy"が定義されていませんと出ます。
どうすればいいのでしょうか?
win7・VC++です
657 :デフォルトの名無しさん2011/05/22(日) 18:27:26.20
#include <string.h>
658 :デフォルトの名無しさん2011/05/22(日) 18:34:14.18
>>657
ありがとうございます。
猫でもわかるCなんて買うんじゃなかった・・
ありがとうございます。
猫でもわかるCなんて買うんじゃなかった・・
660 :デフォルトの名無しさん2011/05/23(月) 14:52:04.45
class CFoo
{
public:
template <class CBoo> static int hogehoge(int CBoo::*);
…省略…
};
という(ような)クラスを目にしたのですが、
staticメソッド hogehoge の引数「int CBoo::*」 が意味不明です;;
これはなんの型なんでしょうか?
{
public:
template <class CBoo> static int hogehoge(int CBoo::*);
…省略…
};
という(ような)クラスを目にしたのですが、
staticメソッド hogehoge の引数「int CBoo::*」 が意味不明です;;
これはなんの型なんでしょうか?
665 :デフォルトの名無しさん2011/05/23(月) 18:07:23.67
>>664
なんか指摘おかしくないか?
確かにhogehogeはstaticだから"CFooの"非staticメンバ変数にはアクセスできないけど
それが>>660となんの関係があるのかわからないな
hogehogeにメンバ変数のポインタ渡してるだけだぞ?
なんか指摘おかしくないか?
確かにhogehogeはstaticだから"CFooの"非staticメンバ変数にはアクセスできないけど
それが>>660となんの関係があるのかわからないな
hogehogeにメンバ変数のポインタ渡してるだけだぞ?
666 :デフォルトの名無しさん2011/05/23(月) 18:10:00.84
>>665
そうなのか
そしたらメンバ変数のポインタを渡したhogehoge()内でどんな事がCBoo::*に対して
出来るのかがわからない
そうなのか
そしたらメンバ変数のポインタを渡したhogehoge()内でどんな事がCBoo::*に対して
出来るのかがわからない
667 :デフォルトの名無しさん2011/05/23(月) 18:19:12.36
>>666
コンパイルエラーになるっていうんだもの
おかしいってのはそこ
グローバル変数かstaticメンバ変数使えば何かすることはできるだろう
意味は知らんが
コンパイルエラーになるっていうんだもの
おかしいってのはそこ
グローバル変数かstaticメンバ変数使えば何かすることはできるだろう
意味は知らんが
669 :デフォルトの名無しさん2011/05/23(月) 18:21:01.12
>>667
ああやっぱりか
staticメンバ変数にstaticでないメンバへのポインタを渡してもコンパイルエラーになるだけだしな
ああやっぱりか
staticメンバ変数にstaticでないメンバへのポインタを渡してもコンパイルエラーになるだけだしな
663 :デフォルトの名無しさん2011/05/23(月) 16:27:47.21
ああ、ありがとう。なんとなく分かって来た。
型int のCBooメンバへのポインタって事ですね。
int を void に変えたらコンパイルエラーになったけど、
それは 型void のメンバなんてそもそもないからなんだね。
型int のCBooメンバへのポインタって事ですね。
int を void に変えたらコンパイルエラーになったけど、
それは 型void のメンバなんてそもそもないからなんだね。
664 :デフォルトの名無しさん2011/05/23(月) 17:43:09.44
こういう風に書かないとコンパイルエラーになるけど気のせいか?
hogehogeはstaticメンバ関数なので非staticメンバ変数にはアクセスできないだろ
class CFoo
{
public:
template <class CBoo>
static int hogehoge(int *cbp) {
return *cbp;
}
};
class CBar {
public:
static int i1, i2;
};
int CBar::i1 = 1;
int CBar::i2 = 2;
class CBar2 {
public:
static int i1, i2;
};
int CBar2::i1 = 3;
int CBar2::i2 = 4;
int main() {
std::cout << CFoo::hogehoge<CBar>(&CBar::i1) << std::endl;
std::cout << CFoo::hogehoge<CBar2>(&CBar2::i1) << std::endl; }
hogehogeはstaticメンバ関数なので非staticメンバ変数にはアクセスできないだろ
class CFoo
{
public:
template <class CBoo>
static int hogehoge(int *cbp) {
return *cbp;
}
};
class CBar {
public:
static int i1, i2;
};
int CBar::i1 = 1;
int CBar::i2 = 2;
class CBar2 {
public:
static int i1, i2;
};
int CBar2::i1 = 3;
int CBar2::i2 = 4;
int main() {
std::cout << CFoo::hogehoge<CBar>(&CBar::i1) << std::endl;
std::cout << CFoo::hogehoge<CBar2>(&CBar2::i1) << std::endl; }
670 :デフォルトの名無しさん2011/05/23(月) 18:32:23.08
staticメンバ関数がthisを受け取らないという事を知らないとこのエラーの意味は
永遠に分からないだろう
永遠に分からないだろう
671 :デフォルトの名無しさん2011/05/23(月) 20:56:25.55
文字列変数をグローバルで volatile char recbuf[20]; と宣言して、
mainの中で char s[20]; と定義して、strcpy(s,recbuf); と書くと、
warning: passing argument 2 of 'strcpy' discards qualifiers from pointer target type
という警告が出ます。
どのように処理するのが正しいのかわからずに困っています。
どなたかこのワーニングの対処法がわかるかたいらっしゃいますか?
mainの中で char s[20]; と定義して、strcpy(s,recbuf); と書くと、
warning: passing argument 2 of 'strcpy' discards qualifiers from pointer target type
という警告が出ます。
どのように処理するのが正しいのかわからずに困っています。
どなたかこのワーニングの対処法がわかるかたいらっしゃいますか?
672 :デフォルトの名無しさん2011/05/23(月) 21:28:00.89
>>671
キャストする
俺はconst_castはvolatileも外せるっていう程度の知識しかない人なので
それが本当に正しい対処法なのかは知らないが
キャストする
俺はconst_castはvolatileも外せるっていう程度の知識しかない人なので
それが本当に正しい対処法なのかは知らないが
673 :デフォルトの名無しさん2011/05/23(月) 21:33:43.36
>>672
それが正しいかどうかがわからないので困ってます。
volatile char* を char* にキャストすることの意味が
いまいちよくわからないですよね。
それが正しいかどうかがわからないので困ってます。
volatile char* を char* にキャストすることの意味が
いまいちよくわからないですよね。
675 :デフォルトの名無しさん2011/05/23(月) 22:33:05.35
それが本当にvolatileなら、迂闊に外していいものか充分に検討すべき。
676 :デフォルトの名無しさん2011/05/23(月) 23:09:09.73
>>675
どうせ外さなくったって暗黙のキャストが発生するだろ
どうしたらいいんだよ
どうせ外さなくったって暗黙のキャストが発生するだろ
どうしたらいいんだよ
677 :デフォルトの名無しさん2011/05/23(月) 23:17:17.18
いやだから、そのvolatileな領域にアクセスする前に排他処理を行なわなくていいのか、などの検討をするべきだ、と。
678 :デフォルトの名無しさん2011/05/24(火) 05:06:31.12
C++でのクラス構成で質問です。
自分はよくこういう事をします。(文法細かい部分無視で説明用に省略)
Class A{
MyDataClass data; // データ管理クラス
B ChildClass;
A(){ ChildClass.pdata = &data; }
}
Class B{
MyDataClass* pdata; // データ管理クラスポインタ
}
シングルトンパターンでの構築方法は知ってますが、ついついこっちのが簡単なのでやってしまいます。
こういうのは一般的なんでしょうか?それとももっと良い方法があるのでしょうか?
自分はよくこういう事をします。(文法細かい部分無視で説明用に省略)
Class A{
MyDataClass data; // データ管理クラス
B ChildClass;
A(){ ChildClass.pdata = &data; }
}
Class B{
MyDataClass* pdata; // データ管理クラスポインタ
}
シングルトンパターンでの構築方法は知ってますが、ついついこっちのが簡単なのでやってしまいます。
こういうのは一般的なんでしょうか?それとももっと良い方法があるのでしょうか?
679 :6782011/05/24(火) 05:13:56.85
さすがにMyDataClassのアドレスを次々と下へいくつもリレーしていく数が多くなれば、
シングルトンパターンで構築します。
しかし、我流の組み方故に果たして自分はオブジェクト指向プログラミングしているのか?
そもそもそんな構築方法でいいのか自信が無くなってきました。
そもそもテンプレートとかも利用価値を感じたことがありません。
単一オブジェクトや変数を扱うなら小細工いらないし、複数のオブジェクトを扱うようなら
テンプレートの中で条件分岐が大量に増えてややこしくなるので、別関数いくつも用意したほうがいいように思います。
シングルトンパターンで構築します。
しかし、我流の組み方故に果たして自分はオブジェクト指向プログラミングしているのか?
そもそもそんな構築方法でいいのか自信が無くなってきました。
そもそもテンプレートとかも利用価値を感じたことがありません。
単一オブジェクトや変数を扱うなら小細工いらないし、複数のオブジェクトを扱うようなら
テンプレートの中で条件分岐が大量に増えてややこしくなるので、別関数いくつも用意したほうがいいように思います。
680 :デフォルトの名無しさん2011/05/24(火) 08:44:54.64
相互参照をどう解決するかってこと?
普通に弱参照つかったり、引数で親をリレーしたりとかじゃねーかな
普通に弱参照つかったり、引数で親をリレーしたりとかじゃねーかな
683 :デフォルトの名無しさん2011/05/24(火) 12:30:12.27
派生クラスの間に合わせ感はすごい。
完全に後でちょっとした使用変更に対応する為のもの。
最初から組み込むのは混乱の元。
完全に後でちょっとした使用変更に対応する為のもの。
最初から組み込むのは混乱の元。
684 :デフォルトの名無しさん2011/05/24(火) 13:04:36.49
メタプロまで出来るとテンプレートの凄さが理解できるんだけど
もはや完全にバッドノウハウだから
だったら最初から言語機能に組み込んで綺麗に書けるようにしろよとは思う
もはや完全にバッドノウハウだから
だったら最初から言語機能に組み込んで綺麗に書けるようにしろよとは思う
685 :デフォルトの名無しさん2011/05/24(火) 13:37:02.25
いま勉強中で仮想基本クラスとかやってるんだけど、
本当にこんなややこしいもので開発なんてできるのけ?
本当にこんなややこしいもので開発なんてできるのけ?
688 :デフォルトの名無しさん2011/05/24(火) 19:52:09.97
>>685
問題が発生するような多重継承が出てきた時点で
設計がおかしいくないか疑うべきだがな
問題が発生するような多重継承が出てきた時点で
設計がおかしいくないか疑うべきだがな
686 :デフォルトの名無しさん2011/05/24(火) 13:48:04.47
初心者的な質問で申し訳ありませんが、よろしくお願いします。
AとBのメソッドがあり、複数のスレッドで非同期的にメソッドが呼ばれています。
AとAが同時に呼ばれるときに排他処理をする必要は無いのですが、AとBが同時に呼ばれてはいけないので、排他処理をする必要があります。
この場合、一般的にはどのように排他すればよいのでしょうか?
Windows環境でWin32APIを使用しています。
AとBのメソッドがあり、複数のスレッドで非同期的にメソッドが呼ばれています。
AとAが同時に呼ばれるときに排他処理をする必要は無いのですが、AとBが同時に呼ばれてはいけないので、排他処理をする必要があります。
この場合、一般的にはどのように排他すればよいのでしょうか?
Windows環境でWin32APIを使用しています。
689 :デフォルトの名無しさん2011/05/24(火) 22:01:42.86
結局CとC++はどっちのが実行速度速いんだ
690 :デフォルトの名無しさん2011/05/24(火) 22:28:25.36
>>689
腕の良いプログラマーが書いたほう。
腕の良いプログラマーが書いたほう。
691 :デフォルトの名無しさん2011/05/24(火) 22:57:03.38
こういうバイナリファイル(先頭から1,2,0,4,0,0,0)
0102 0004 0000 00 ...
を先頭から1バイト、2バイト、4バイトで読み込むと
1,2,4にならずに1,0,4になるのですが、これはなぜですか?
ifstream ifs ("mem.dump");
ifs >> buf_1;
printf ("%x ", buf_1);
ifs >> buf_2;
printf ("%x ", buf_2);
ifs >> buf_4;
printf ("%x ", buf_4);
0102 0004 0000 00 ...
を先頭から1バイト、2バイト、4バイトで読み込むと
1,2,4にならずに1,0,4になるのですが、これはなぜですか?
ifstream ifs ("mem.dump");
ifs >> buf_1;
printf ("%x ", buf_1);
ifs >> buf_2;
printf ("%x ", buf_2);
ifs >> buf_4;
printf ("%x ", buf_4);
695 :デフォルトの名無しさん2011/05/24(火) 23:22:25.71
>>691
buf_1, buf_2, buf_4の型は?
buf_1, buf_2, buf_4の型は?
693 :デフォルトの名無しさん2011/05/24(火) 23:06:05.14
違った。初期値が入ってました。
1バイト目が1(正しい)
2〜3バイト目が0(間違え)
4〜7バイト目が変わらず(間違え)
です。とにかくおかしいです。
1バイト目が1(正しい)
2〜3バイト目が0(間違え)
4〜7バイト目が変わらず(間違え)
です。とにかくおかしいです。
694 :デフォルトの名無しさん2011/05/24(火) 23:12:58.60
わかった。アライメントがあってないと壊れて0が帰ってきて
それ以降一切読めなくなるのですね。
飛んだ欠陥品だ > ifstream
それ以降一切読めなくなるのですね。
飛んだ欠陥品だ > ifstream
696 :デフォルトの名無しさん2011/05/25(水) 01:58:32.67
>>694
clear()やってないに1票
clear()やってないに1票
698 :デフォルトの名無しさん2011/05/25(水) 03:00:50.40
>>694
欠陥品なのは君の頭の方です
#include <iostream>
#include <fstream>
#include <iomanip>
const char* const FILENAME = "test.bin";
int main()
{
std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary);
char buf[128];
if (!ifs)
return -1;
ifs.get(buf, 7);
std::cout << std::setw(1) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(*reinterpret_cast<unsigned char*>(buf)) << std::endl;
std::cout << std::setw(2) << *reinterpret_cast<unsigned short*>(buf + 1) << std::endl;
std::cout << std::setw(4) << *reinterpret_cast<unsigned*>(buf + 3) << std::endl;
}
欠陥品なのは君の頭の方です
#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;
}
697 :デフォルトの名無しさん2011/05/25(水) 02:37:23.53
オブジェクトのメンバを介してゲーム上のキャラクタ同士がダメージを与えたりするものなのだろうか。
いきなりだが、ゲームプログラムの噺です。
いきなりだが、ゲームプログラムの噺です。