【初心者歓迎】C/C++室 Ver.81【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/11/29(木) 00:34:40.07ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.80【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1348161305/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
NG推奨:◆QZaw55cn4c←半角にして登録してくだい
0002デフォルトの名無しさん
2012/11/29(木) 00:38:12.090003デフォルトの名無しさん
2012/11/29(木) 00:58:14.120004デフォルトの名無しさん
2012/11/29(木) 07:25:31.64cygwin にはすでにはいっている。
0006デフォルトの名無しさん
2012/11/29(木) 08:02:30.960007デフォルトの名無しさん
2012/11/29(木) 10:19:29.46何が変わったか分かるエスパーいますか?
0008デフォルトの名無しさん
2012/11/29(木) 17:45:28.14multiple definition of 'error'
で、私は error という関数を定義していません。
/usr/include/c++/4.4/new:101でかち合ってるみたいですが
何が何やらサッパリです。
何から確認すればいいでしょうか。お願いします。
0009デフォルトの名無しさん
2012/11/29(木) 18:25:10.290010デフォルトの名無しさん
2012/11/29(木) 19:10:05.65多重定義しているんでしょう。
まずは、自分の作ったヘッダファイル全ての1行目に
#pragma once
を書いてリビルドしてみたらいかがでしょう。
それでもダメなら別の原因。
0011デフォルトの名無しさん
2012/11/29(木) 19:20:34.85これだけでエラーになるならコンパイラが壊れている
#include でも何でも、どうしたら再現する不具合なのかを突き止めれ
0012デフォルトの名無しさん
2012/11/30(金) 02:03:53.2110スレッド動かして各スレッドが60fpsでループ、その1スレッドの1フレーム間でロックとアンロック合計200回とかきついっすかね?
10スレッドあるのでそれだけで2000回、他の諸々入れるとそのアプリ全体で毎フレーム2200回いく予定なんすけどね
2.4GHzのデュアルコアで他に重いものは動かさない前提っす
今の設計だと上記状態になるんで、無理なら開発を進める前にまた頑張って考えて設計を変更しなきゃいけないんす
0013デフォルトの名無しさん
2012/11/30(金) 02:49:01.97・Cの質問でない
・ミューテックスの重さはOSによる。もっと言えば実装による。
・そもそも組み込みで無いOSが動いているなら、そのOS自体の重さを考慮する必要があるだろう。
組み込みなら2,4GHzのデュアルコアとか神レベルの速さ。
いずれにせよハイレベルの3Dゲームでも作るんじゃなければ気にする必要はない。
・ミューテックスの一般的な実装をイメージするならそこまで重く無いだろう。
ディスパッチした時は負荷がかかるだろうが、常識的な作りなら1スレッドの実行で数回発生するくらいでは。
・1スレッドごとに200回のロック・アンロック。という設計思想が良く分からない。
ロック->アンロック->ロック->アンロック->の繰り返し?それなら効率が悪いからまとめてロックしとけ。
ロック->ロック->ロック->アンロック->アンロック->アンロック?200回とか階層深すぎじゃないの?
・全てのスレッドを60fpsで動かす必要が本当にあるのだろうか。同じスレッドをたくさん起動するのだろうか。
0014デフォルトの名無しさん
2012/11/30(金) 02:59:18.23ttp://www.isus.jp/article/intelguide/2-3/
0015デフォルトの名無しさん
2012/11/30(金) 07:56:16.970016デフォルトの名無しさん
2012/11/30(金) 11:10:53.29大方、画面中のオブジェクト1個ずつに対してスレッドを割り当てて
それぞれが排他しないとまずいタイミングでロックかけようとしてる
んだと思うけど、設計が頭悪すぎる。
0017デフォルトの名無しさん
2012/11/30(金) 11:25:07.73くさいニオイがぷんぷんするんだけど、こんなところで質問する前に会社の
上司とか同僚に聞いたほうが早いぞ。
スレッドに分ければオーバーヘッドが減るってものではない。
0018デフォルトの名無しさん
2012/11/30(金) 13:49:04.06ありがとうございます
MMORPGを作ろうとしているニートっす
質問はMMO鯖に関するものっす
最初のユーザーの同時接続数の目標を1000にしてたので、それぞれ接続チェックごとにメッセージキューのロック&アンロックをすると上記の感じになるっす
1スレッドで1000接続全部処理するとタイムラグが出ると思って100接続ずつに分けようと考えたんす
でもスレッドを分けると、同期がいるじゃないっすか
だけどスレッドごとにロックするとそこでまたタイムラグが発生するじゃないっか
例えばスレッドAの誰かがスレッドBの2番目(B-2)の人に攻撃したとき、そのイベントの発生がB-1の人の処理をしてる最中だったとすると、
スレッドごとロックをかけていた場合、B-100まで処理が終わってアンロックされるまでB-2のキューに攻撃されたという情報が渡らないじゃないっすか
だけど接続ごとにロックする方式なら、B-1しかロックされていないからB-2のキューに情報を積めるじゃないっすか
少し前までチョン政府の助成金を追い風にチョンゲ企業が粗悪なMMORPGを大量に送り込んできたじゃないっすか
その助成金もなくなった今、反撃のチャンスだと思ってるんす
そしてそれで稼いでニート脱出するっす
とりあえず設計しなおします
0019デフォルトの名無しさん
2012/11/30(金) 13:50:45.570020デフォルトの名無しさん
2012/11/30(金) 23:37:55.67近からずといえど遠からずだったなw
0021デフォルトの名無しさん
2012/12/01(土) 00:14:23.33・60fpsというのは基本的に画面表示用スレッドの周期。
画面表示の無いサーバなら60fpsで処理する意味は無い。
・普通に考えると受信スレッドとゲームスレッドの2つで良い。
・受信スレッドは常時受信を行い、各ユーザーからの通信メッセージを受けてリストにする
・ゲームスレッドは常にループしていて、各ユーザーの通信メッセージを順次処理していく。
通信メッセージごとにサーバ上のゲームデータを更新し、必要に応じて通信メッセージを送信する。
・MMOの作り方みたいな本があるはずだから読んだ方が良いかも
0022デフォルトの名無しさん
2012/12/01(土) 01:52:26.18その本は買ったがプログラム初歩習得ゲームはド素人みたいな人向けに
基本のキの部分しか解説してなかった。役に立つかと言えば微妙。
0023デフォルトの名無しさん
2012/12/01(土) 11:00:47.81便所の落書きや知恵遅れで質問するなら趣味のプログラミングは辞めたほうがいい。
0024デフォルトの名無しさん
2012/12/01(土) 15:44:33.95class PointTest {
private:
int m_x;
int m_y;
public:
void Set(int x, int y) { /*省略*/ }
};
このようなクラスにGetメソッドを用意する場合
void Get(int &x, int &y) として1つで済ませるのと
int GetX() int GetY() の2つを提供するのとではどちらがより一般的なのでしょうか?
0025デフォルトの名無しさん
2012/12/01(土) 15:46:36.33int x;
int y;
};
class PointTest : public POINT
0026デフォルトの名無しさん
2012/12/01(土) 15:55:05.36両方いれたらいいじゃん
でもよく見るのは各成分getかな
0027デフォルトの名無しさん
2012/12/01(土) 16:06:04.13別に作りたけりゃ両方作ってもいいのよ
0028デフォルトの名無しさん
2012/12/01(土) 17:58:53.190029デフォルトの名無しさん
2012/12/01(土) 18:04:33.86変数間で保つべき不変条件でも無けりゃ private にする意味ないでしょ。
点の x, y 座標間に何かそんな関係があるか?
0030デフォルトの名無しさん
2012/12/01(土) 18:07:10.58publicにしたら質問の意味がなくなるだろう。
馬鹿じゃないの?
0031デフォルトの名無しさん
2012/12/01(土) 18:10:08.47void SetPoint(const PointTest& pt);
PointTest GetPoint();
ならまだ理解できるんだが
0032デフォルトの名無しさん
2012/12/01(土) 18:59:14.90ブレークはったりデバッグコード仕込んだりできるのも重要
0033デフォルトの名無しさん
2012/12/01(土) 19:13:04.66get、setは余りたくさん書きたくないからx,yくらいなら構造体でまとめる。
struct Point {
int x;
int y;
};
class PointTest {
private:
Point point_;
public:
void setPoint(Point &point);
Point getPoint(void);
};
0034デフォルトの名無しさん
2012/12/01(土) 20:00:07.530035デフォルトの名無しさん
2012/12/01(土) 20:19:17.730036デフォルトの名無しさん
2012/12/01(土) 20:50:07.77getterが
> void Get(int &x, int &y) として1つで済ませるのと
この形の一つだけっていうのならそれは間違いなく駄目な設計
そういうクラスを実際に使うとわかるが値の取得に変数が必要ってのは明らかに使い勝手が悪い
0037デフォルトの名無しさん
2012/12/01(土) 22:12:03.43C++ の const は性的だし♡
0038デフォルトの名無しさん
2012/12/02(日) 00:33:52.240039デフォルトの名無しさん
2012/12/02(日) 01:39:40.75デバッグ用にブレーク貼れるようにする
クラステンプレート作ってるわ
0040デフォルトの名無しさん
2012/12/02(日) 02:03:49.040041デフォルトの名無しさん
2012/12/02(日) 02:59:51.420042デフォルトの名無しさん
2012/12/04(火) 16:01:02.060043デフォルトの名無しさん
2012/12/05(水) 05:01:08.51cout/wcout/printf/wprintf 全てを共存する一般的な方法はありますか?
0044デフォルトの名無しさん
2012/12/05(水) 11:26:48.910045デフォルトの名無しさん
2012/12/05(水) 12:41:34.330046デフォルトの名無しさん
2012/12/05(水) 17:07:57.340047デフォルトの名無しさん
2012/12/05(水) 19:18:22.53そもそも「共存」ってどういう意味なんだ? そこがはっきりしないと答えようがない。
004843
2012/12/05(水) 21:34:40.59http://ideone.com/WqXlDH
http://ideone.com/zzCBLZ
http://ideone.com/jx3wJU
http://ideone.com/rrhy6C
http://ideone.com/OeHtaM
http://ideone.com/1L9R8J
http://ideone.com/zRmV7N
http://ideone.com/Xdzc9r
こんな結果です。
msvcならバッファのflushに注意すれば大丈夫な気もしますが
gccでは諦めるしか無い?
0049デフォルトの名無しさん
2012/12/06(木) 00:01:47.15std::coutとstd::wcoutは共存しない
0050デフォルトの名無しさん
2012/12/06(木) 01:20:44.81仕様上はstreamにはorientationという概念があってnarrowとwideのI/Oを
同一のストリームに混在させられないことになってる
MSVCだと一見平気で混ぜられるけど、_O_U8TEXTみたいなモードは
orientationに基づいてるみたいで、その場合は混ぜられないよ
005143
2012/12/06(木) 01:58:51.49解説したブログが見つかり納得するまでにはいかないけど
理解することは出来ました。
reopenするとかで何とか出来そうなこともなさそうだけど
コストが高そうなので諦めます。
ありがとう。
0052デフォルトの名無しさん
2012/12/06(木) 02:00:00.98orientationなる単語で検索したところ //←コピペミスで抜けてました。
解説したブログが見つかり納得するまでにはいかないけど
理解することは出来ました。
reopenするとかで何とか出来そうなこともなさそうだけど
コストが高そうなので諦めます。
ありがとう。
0053デフォルトの名無しさん
2012/12/10(月) 04:03:55.42>後置きの場合にはインクリメント演算子による演算以外の処理を先に行います。
ググるとこんな感じの事が書いてあるし、自分でもそうだと思ってたんですが
最後に後置きのイクリメント、デクリメントの処理がされると思ってるとなんかおかしい事になります
環境はwindows7でVC++2010Expressです
0054デフォルトの名無しさん
2012/12/10(月) 07:24:30.05×イクリメント
○インクリメント
例えば、j = i++はj = i, i = i + 1と等価だと考えればいい。
0055デフォルトの名無しさん
2012/12/10(月) 07:34:30.28普通はずっと片方を使い続ける
0056デフォルトの名無しさん
2012/12/10(月) 09:54:07.710057デフォルトの名無しさん
2012/12/10(月) 15:15:31.43そういうの使う時はorientationには要注意
そういうライブラリはまず間違いなくnarrowで出力していると思うが
0058デフォルトの名無しさん
2012/12/10(月) 15:30:38.440059デフォルトの名無しさん
2012/12/10(月) 19:28:12.01訂正ありがとうございます
副作用完了点でググったら一つの式で一つのオブジェクトの値の変更は一回しかできない、とありました
自分がやろうとしてたのは一つの式で一つのオブジェクトの値の変更が二回になっていたのでたぶんそのせいですね
ありがとうございました
0060デフォルトの名無しさん
2012/12/11(火) 01:15:15.61このような手当てが必要な理由はなんでしょうか?
0061デフォルトの名無しさん
2012/12/13(木) 23:08:54.71あと L"あ"の時のLは何から来ているの?
wide文字だよって示すならwprintf見たいに、w"あ"って感じにしたほうがいいような
0062デフォルトの名無しさん
2012/12/13(木) 23:14:44.08tはtext
wにしなかったのは、多分整数と合わせたんじゃないのかな
0063デフォルトの名無しさん
2012/12/13(木) 23:30:37.500064デフォルトの名無しさん
2012/12/13(木) 23:35:00.030065デフォルトの名無しさん
2012/12/14(金) 01:25:53.080066デフォルトの名無しさん
2012/12/14(金) 01:31:06.420067デフォルトの名無しさん
2012/12/14(金) 02:43:29.1932ビットのポインタ。従来の16ビットポインタより長いという意味。
昔、16ビットと32ビットのポインタを混在して区別する必要があった時代のなごり。
今じゃ(少なくともWindowsやLinuxでは)サイズの異なるポインタが混在することはないから気にするな。
0068デフォルトの名無しさん
2012/12/14(金) 02:51:37.77far とは違うものなの?
0069デフォルトの名無しさん
2012/12/14(金) 07:14:47.65同じ
0070デフォルトの名無しさん
2012/12/14(金) 08:47:17.38違う。あっちはセグメント。
0071デフォルトの名無しさん
2012/12/14(金) 09:02:03.020072デフォルトの名無しさん
2012/12/14(金) 09:12:48.84P は "ポインター (pointer)"、LP は "ロング ポインター (long pointer)"
の略として使われてきました。ロング ポインターはファー ポインター (far
pointer) とも呼ばれますが、16 ビット Windows の名残で、現在のセグメント
の外にあるメモリ範囲をアドレス指定するのに使用されていました。LP プレ
フィックスは、16 ビットのコードを 32 ビット Windows に簡単に移植できる
よう、予約されていました。現在ではこの区別は存在せず、単にポインターと
呼ばれています。
0073デフォルトの名無しさん
2012/12/14(金) 09:14:13.28far pointerはsegment16bit * 16 + offset16bitで20bit(1MB)のメモリ空間を表すもの。
しかしリアルモードではCPU 自身がセグメントを16ビット、オフセットを16ビットと持ち、12ビット分を重ねるのはCPU内
したがって記述レベル、たとえばアセンブリ言語で記述するときもセグメント、オフセットそれぞれに word=16bit の領域を準備することが多い
大概のC処理系でもそう。(sizeof(void far *) = 32)
0075デフォルトの名無しさん
2012/12/14(金) 10:11:41.90同じことしか言ってないように見える
最後4だし
0076デフォルトの名無しさん
2012/12/15(土) 08:37:43.76long pointer は FAR で定義されている
FAR を far で定義するか空定義にするかは環境次第
0077デフォルトの名無しさん
2012/12/15(土) 09:09:59.58化石だよね。だから>>74がリアルモードに限定しているのは間違い。
16bit x86の設計は8bitCPU8080のコードをポーティングしやすくする
ためにアドレス空間も8080と同じ64KBを基本とした。
この範囲のプログラムはポインタも16bitで良かった。
だが時代が進みコードサイズが爆発的に増えた結果、オフセット
だけでは不足してきたので、セグメントとペアで扱うことにした。
だがC言語的にはポインタはポインタでしかないので、ポインタが
アドレス可能な範囲は実装依存だった。
でもオフセットのみのポインタとセグメントとペアのポインタは区別して
扱わないと開発上問題になる。そこで予約語farを定義して、farがつく
ポインタはセグメントとペア、それ以外はオフセットのみと定義すること
にした。
一般的にはfarのつくポインタだけをセグメントとペアのもの、つかない
ポインタはオフセットのみという認識だが、あえて両者を区別しやすく
するという意味でオフセットのみのポインタを「nearポインタ」と呼ぶ場合
もある。でも今となっては用済みのテクノロジでどうでもいいヨタ話。
0079デフォルトの名無しさん
2012/12/15(土) 09:29:44.69昔の16bit x86用Cコンパイラには「メモリモデル」なるものが存在した。
詳しい話は英文だけど
ttp://www.c-jump.com/CIS77/ASM/Directives/D77_0030_models.htm
このへんを参照。
んで、開発を始める前にプログラム規模をまず見積もり、メモリモデル
のどれを採用するかを慎重に決める必要があった。なぜなら途中から
メモリモデルを変更するとコード全体に波及する可能性があったから。
大抵のプログラムでは単一コードセグメント、単一データセグメントで
間に合うものだったが、後々の保険にということで複数セグメント前提
にしてポインタを全部farにする、なんていう「大は小を兼ねる」判断も
行われていた。
0080デフォルトの名無しさん
2012/12/15(土) 09:47:22.5332KBのコードリソースに入るサイズで切り分ける必要があった。
コードリソースと言う制約自体はMac-OSをベースにしていたPalmOSにも受け継がれた。
0081デフォルトの名無しさん
2012/12/15(土) 09:51:36.83ショートジャンプ(PC相対とかレジスタ相対ジャンプ)の範囲で
おさめるための策だと思われる。
時代背景から考えて現実的とは言えるけど、単なるウィンドウ
システム側の制約なだけ。MC680x0はリニアなアドレス空間で
16MBまでアクセスできた。
0082デフォルトの名無しさん
2012/12/15(土) 10:41:58.36farポインタの存在する環境であればfarポインタになるのだが
32-bit環境以上なら普通のポインタと同じ
0083デフォルトの名無しさん
2012/12/15(土) 11:26:29.81知れないが、セグメント間はA5相対JSRでアクセスするようコンパイラが判断するから、
関数ポインタを使いたいような場面でもない限りプログラマが意識する必要はなかったな。
0084デフォルトの名無しさん
2012/12/15(土) 21:29:59.09switchがショートジャンプなので
延々と処理を書くと
適当なとこにジャンプしてた
0085デフォルトの名無しさん
2012/12/15(土) 21:35:23.60「適当」って「適切」じゃなくて「いい加減」という意味ですか?
怖いですね。
0086デフォルトの名無しさん
2012/12/15(土) 22:08:15.490087デフォルトの名無しさん
2012/12/15(土) 22:40:53.85さすがに見たことない。
0088デフォルトの名無しさん
2012/12/16(日) 02:35:18.51http://www.geocities.jp/ky_webid/cpp/language/007.html
上記のURL中に
「デストラクタですが、これはクラスのインスタンスが解体されるときに、
解体の直前で自動的に呼び出されます。
解体されるタイミングは、そのインスタンスのスコープを抜けるときです。 」
とあるのですが、
では
IProduct* createFactory(Content* content)
{
switch( content->id )
{
case PARTS_ID_A:
return new ProductA( content );
default:
return NULL;
}
}
ProductA* product = createFactory(content);
のようなコードはなぜ正常に動くのでしょうか??
createFactory内でnewしたProductAはすぐreturnされてスコープを抜けてしまうので
その時点でデストラクトされ、
productに代入されるポインタはすでに使えないものになっているのではないのでしょうか?
理屈がよくわからないのですが、教えて頂けると嬉しいです。
0089デフォルトの名無しさん
2012/12/16(日) 02:53:01.82009074 ◆QZaw55cn4c
2012/12/16(日) 02:53:57.65new で得たポインタはdeleteしない限り無効にはならない
new で得たポインタは関数を超えても生き残り続ける
new したものはdeleteせよ、という宗教もここからきているかと
0091デフォルトの名無しさん
2012/12/16(日) 03:32:27.840092デフォルトの名無しさん
2012/12/16(日) 03:36:33.83ありがとうございますm(__)m
0093デフォルトの名無しさん
2012/12/16(日) 17:58:39.310094デフォルトの名無しさん
2012/12/16(日) 18:15:29.85言語としてヤバイ状態なんじゃないかな
0095デフォルトの名無しさん
2012/12/16(日) 18:17:24.580096デフォルトの名無しさん
2012/12/16(日) 18:18:38.31下手に使うと危険だが、上手く使えば効果的
0097デフォルトの名無しさん
2012/12/17(月) 01:00:18.370098デフォルトの名無しさん
2012/12/17(月) 01:36:18.880099デフォルトの名無しさん
2012/12/17(月) 01:58:58.85指定できるのですよ。
int a;
a=100;
char hoge[a];
ってもC++の話じゃないね。させん
c99 で公認されたのでは?
0101デフォルトの名無しさん
2012/12/17(月) 02:58:50.82スマポの話と関係なくね?
0102デフォルトの名無しさん
2012/12/17(月) 03:09:47.470103デフォルトの名無しさん
2012/12/17(月) 07:13:40.26C++の話じゃないね
0104デフォルトの名無しさん
2012/12/17(月) 07:52:25.63>>99 にすでにかいてある
0105デフォルトの名無しさん
2012/12/17(月) 21:41:44.74delete pOrig;のところって
if(pOrig != pb) delete pOrig;
としなければ例外安全とは言えないよね?
0106デフォルトの名無しさん
2012/12/17(月) 22:40:58.22データ数がどれくらいあるかわからない場合はどうしたらいいでしょうか?
前に見たソースだと
同じiniファイルのどこかでキー名を宣言?しておき、
そのキー名に文字列をくっつけてキー名を作るみたいな事をしていた気がするのですがどこかにいったので・・
[Object]
ObjectName=Hoge
HogeNum=10
HogeStr=ほげ
ObjectName=Aho
AhoNum=20
AhoStr=あほ
みたいな感じだった気がしなくもないんですが・・・、
0107デフォルトの名無しさん
2012/12/17(月) 22:50:52.81section名の重複ってありなんでしょうか?
0108デフォルトの名無しさん
2012/12/17(月) 22:52:53.160109デフォルトの名無しさん
2012/12/17(月) 23:18:45.24キー名決まってないというか、iniファイル側でやりたいです
0110デフォルトの名無しさん
2012/12/17(月) 23:27:18.57KeyList=Aho,Hoge
Aho1=>>106
Aho2=>>107
Aho3=>>109
Hoge1=>>3
Hoge2=>>99
0111デフォルトの名無しさん
2012/12/18(火) 01:16:34.22【1】newを伴わないポインタでは利用できるのでしょうか。あるいは、利用するべきでしょうか。
char *p1 = "Hello, Work!"; // 例えば文字列定数の先頭アドレス。
int *p2 = foo->GetPointer(); // 例えばポインタを返す関数。内部でnewされているかもしれない。
【2】宣言と同時に初期化しない場合、どう記述するべきでしょうか。(boost::scoped_ptrを想定)
boost::scoped_ptr<bar> p3;
p3 = new bar(); //今まではこう書いていたが…?
0112デフォルトの名無しさん
2012/12/18(火) 01:28:01.15Java、C#、スクリプト言語には標準で入るが、速度を犠牲にする。
プログラム上で開放を忘れなければ必要なし。
0114デフォルトの名無しさん
2012/12/18(火) 01:59:57.85hoge使ってる馬鹿は議論しようとするな
馬鹿の議論ほど不毛なものはない
0115デフォルトの名無しさん
2012/12/18(火) 02:00:10.64> 【1】newを伴わないポインタでは利用できるのでしょうか。あるいは、利用するべきでしょうか。
破棄処理に応じたRAIIラッパーを使うか、 boost::shared_ptr, std::shared_ptr, std::scoped_ptr などの
破棄処理を指定できるスマートポインタを使う。
> 【2】宣言と同時に初期化しない場合、どう記述するべきでしょうか。(boost::scoped_ptrを想定)
p.reset(new ...) とする。
0117デフォルトの名無しさん
2012/12/18(火) 06:04:07.44セクション名だけ指定したら
キーのコレクションが返却される
とか書いてないか
0118デフォルトの名無しさん
2012/12/18(火) 08:25:12.19俺の持ってるのは英語版なのでページが違うようだが、
Widget& Widget::operator=(const Widget& rhs)
{
Bitmap *pOrig = pb;
pb = new Bitmap(*rhs.pb);
delete pOrig;
return *this;
}
のことだったら new がオーバーロードされてなければ pOrig != pb になるから意味ないんじゃね?
new で例外が飛ぶならそこまで処理来ないし。
0119デフォルトの名無しさん
2012/12/18(火) 08:26:01.60そもそもそんな標準関数なんてないんだが。
みんながちゃんと、あんたの想定と同じ環境を想定してくれるとは限らんぞ。
0120デフォルトの名無しさん
2012/12/18(火) 08:42:30.60公式リファレンスが英語でよくわからないです
>>119
すいません、マイクロソフトのページにあったのでつい・・・
>>110
キー名を羅列したものを文字列として取得した後にcsvとして取得しないとダメですか?
0121デフォルトの名無しさん
2012/12/18(火) 08:49:57.44GetPrivateProfileSection
GetPrivateProfileSectionNames
がそれっぽい関数なんですけどなんでしょうか?
0122デフォルトの名無しさん
2012/12/18(火) 08:58:56.53GetPrivateProfileSectionNames
これが答えそのもの
0124デフォルトの名無しさん
2012/12/18(火) 19:57:54.250125デフォルトの名無しさん
2012/12/18(火) 20:11:44.91else if( (int v = calc_a(i)) > max ) max = v;
else max = calc_b(i);
と書きたいのですがコンパイルが通らないので、仕方なく
int v;
if( flag ) {max = CONSTANT; return;}
else if( (v = calc_a(i)) > max ) max = v;
else max = calc_b(i);
とやっています。
もっと楽な書き方は無いでしょうか?
0126デフォルトの名無しさん
2012/12/18(火) 20:17:05.25max = CONSTANT;
return ;
}
max = calc_a(i) > max ? calc_a(i) : calc_b(i);
0127デフォルトの名無しさん
2012/12/18(火) 20:25:53.910128デフォルトの名無しさん
2012/12/18(火) 20:29:36.76default:
int v=cal_a(i);
if (!(v>m))v=cal_b(i);
m=v; break;
case true: m=CON; }
0129デフォルトの名無しさん
2012/12/18(火) 20:34:13.500130デフォルトの名無しさん
2012/12/18(火) 21:27:01.98一時変数たるvを関数(?)の先頭で宣言して生存期間が長いのが嫌だとエスパーすると、
中括弧で新たにブロックを作ってやれば処理の途中でもブロック内でのみ有効な一時変数を宣言できる。
違ったら無視してくれ。
// :
// ここまで処理
{
int v;
// ここに処理
}
// ここからも処理
// :
0131デフォルトの名無しさん
2012/12/18(火) 22:03:39.42外側にあっても同じことができますよね?
0132デフォルトの名無しさん
2012/12/18(火) 22:17:34.00インナークラスのほうがアクセス権限が強いからです
0133デフォルトの名無しさん
2012/12/18(火) 22:44:32.06C++のインナークラスはただのクラスじゃね?
0134デフォルトの名無しさん
2012/12/18(火) 23:38:56.76文字(hohoho)が入らない(`;ω;´)
0135デフォルトの名無しさん
2012/12/18(火) 23:40:23.94ありがとう
0136デフォルトの名無しさん
2012/12/19(水) 00:06:32.16catch されてるかどうか関係なくね?
catch されてなかったとしたら何が問題だと思ってるの?
0137デフォルトの名無しさん
2012/12/19(水) 00:37:48.42他から隠したいもの、他に公開する必要がないものは内部クラスにする
あるクラスからしか使わないようなものは、内部クラスにした方が良い
0138デフォルトの名無しさん
2012/12/19(水) 18:10:01.00newが失敗して例外が投げられて、その後誰もcatchしなかったらエラーにならないの?
0139デフォルトの名無しさん
2012/12/19(水) 19:12:05.060140デフォルトの名無しさん
2012/12/19(水) 23:19:31.860141デフォルトの名無しさん
2012/12/20(木) 00:35:52.570142デフォルトの名無しさん
2012/12/20(木) 00:43:21.73例外発生で即 terminate() となるが、それが問題かどうかはプログラムに対する要求による。
問題だとしても >>118 で挙げられているコード片に例外安全上の問題があるとは言わない
0143デフォルトの名無しさん
2012/12/20(木) 01:27:24.870144デフォルトの名無しさん
2012/12/21(金) 18:42:30.68これらは、ちょうど二進数になるように数値が設定されています。
enum MyEnum
{
APPLE=1, ORANGE=2, GRAPE=4, BANANA=8, STRAWBERRY=16,
};
const intや#defineで設定するのとは異なり、enumは型チェックをしてくれるので便利ですが、
せっかく二進数になるように値を設定したのに、 APPLE|BANANA のようなORで複数を代入するような使い方ができません。
関数の引数の場合は、呼び出し側でstatic_cast<int>とするなり、
あるいはint版とMyEnum版で関数を作ってオーバーロードするなりすれば問題ないですが、enumの恩恵を受けているとは言いがたいです。。
特に後者の場合は、引数が複数あると定義の数が倍々で増えてしまいます。
何かスマートな解決方法はありませんでしょうか。
0145デフォルトの名無しさん
2012/12/21(金) 19:22:36.45switch(i) {
case 1:
func1();
break:
case 2:
func2();
break:
case 3:
func3();
break:
}
を
void func<1>(){}
void func<2>(){}
void func<3>(){}
func<i>();
みたいにして
呼び出すよう方法はありませんか?
0146デフォルトの名無しさん
2012/12/21(金) 19:31:41.03intでいいよ
0147デフォルトの名無しさん
2012/12/21(金) 19:32:58.77typedef void (*pfunc)();
pfunc func[] = {func0, func1, func2};
func[i]();
みたいなこと?
0149デフォルトの名無しさん
2012/12/21(金) 19:43:12.92登録されていない番号の場合はデフォルトで
func<int>()
を呼び出したいdす
多胎とかテンプレートで記述する方法ないですか?
0150デフォルトの名無しさん
2012/12/21(金) 19:45:56.36少し考えればできるから頑張ってね
0151デフォルトの名無しさん
2012/12/21(金) 19:47:32.53c++ならばenum型を演算子のオーバーロードで
MyEnum operator|(MyEnum a,MyEnum b)
{return static_cast<MyEnum>(static_cast<int>(a)|static_cast<int>(b));}
>>145
つenable_if
0152デフォルトの名無しさん
2012/12/21(金) 20:13:34.77enable_ifだと
テンプレート関数の特殊化とあんまり変わらない飢餓するのですが
気のせいでしょうか?
func<1>{
処理1
}
func<2>{
処理2
}
を
func<i>();
で呼び分けるような事が屍体のです:
テンプレート関数の特殊化だと、
func<i>();
のi の部分は変数はだめだとコンパイラ(VC10)に起こられました
0153デフォルトの名無しさん
2012/12/21(金) 20:24:19.16case 1:return func1;
case 2:return func2:
case 3:return func3;
default return NULL; }
とすればいいとおもうよ。
0154デフォルトの名無しさん
2012/12/21(金) 20:33:19.870155デフォルトの名無しさん
2012/12/22(土) 03:39:28.350156デフォルトの名無しさん
2012/12/22(土) 11:36:33.89多態でいいじゃん
0157デフォルトの名無しさん
2012/12/22(土) 11:47:11.570158デフォルトの名無しさん
2012/12/22(土) 12:13:57.860159デフォルトの名無しさん
2012/12/22(土) 12:15:16.47ジャンプテーブル最適化もしてくれるぞ
0160デフォルトの名無しさん
2012/12/22(土) 12:30:37.23多用するとコンパイラはおろかPGの目でもコードが追跡出来なくなる
それは間違いなく破滅に繋がる
すべて静的な世界で完結させる癖を付けなさい
0161デフォルトの名無しさん
2012/12/22(土) 13:39:12.11switch(i) {
case 1:
func1();
break:
case 2:
func2();
break:
case 3:
func3();
break:
case 4:
func4();
break:
case 5:
func5();
break:
case 6:
func6();
break:
case 7:
func7();
break:
case 8:
func8();
break:
case 9:
func9();
break:
}
0162デフォルトの名無しさん
2012/12/22(土) 14:29:43.20enum { value = N * Factorial<N - 1>::value };
};
template <> struct Factorial<0> {
enum { value = 1 };
};
0163デフォルトの名無しさん
2012/12/22(土) 14:37:20.900164デフォルトの名無しさん
2012/12/22(土) 15:53:00.270165デフォルトの名無しさん
2012/12/22(土) 20:48:52.600166デフォルトの名無しさん
2012/12/22(土) 21:23:42.8699とかいうマジックナンバーで再起をとめたり
連番じゃないといけないのがダサい
0167デフォルトの名無しさん
2012/12/23(日) 15:38:11.30それさあ、コンパイラによって再帰のネストレベルがえらく違うんだよね
0168デフォルトの名無しさん
2012/12/23(日) 16:30:47.500169デフォルトの名無しさん
2012/12/23(日) 20:35:52.640170デフォルトの名無しさん
2012/12/23(日) 22:51:53.940171デフォルトの名無しさん
2012/12/24(月) 08:42:33.16環境によるけど、大抵コンパイラじゃなくてリンカーのオプションだよ。
て言うか、そこで指定されるのは初期値なだけで、例えば Windows
ならスレッド作る時に個別に指定できるし。
0172デフォルトの名無しさん
2012/12/24(月) 10:42:38.90templateはリンカに頼らずコンパイラの内部でバイナリ吐いてしまうだろうが
それにネストレベルを変更するスイッチがないコンパイラもある
0173デフォルトの名無しさん
2012/12/24(月) 11:11:32.050174デフォルトの名無しさん
2012/12/24(月) 11:13:20.50関数の再帰呼び出しならスタックかもしれないけど、templateはコンパイル時に展開されてしまうんだぞ
0175デフォルトの名無しさん
2012/12/24(月) 11:27:38.300176デフォルトの名無しさん
2012/12/24(月) 17:59:44.46typedef int intArray[SIZE];
と同じことをstd::vectorでもやりたいのですが
typedef std::vector<int> intVector[SIZE]; //これは意図したものとは違う挙動になる
typedef std::vector<int> intVector(SIZE); //エラー
typedef std::vector<int>(SIZE) intVector; //エラー
などやってみても、どうしてもエラーが出て実現できません。
std::vectorと全く同じ振る舞いをするが初期サイズだけが決まっている別名をつけたいのですが、
std::vectorは継承もダメっぽいということで、どうすれば実現できるでしょうか?
今のところ
class intVector
{
public:
std::vector vec;
intVector() : vec(SIZE) {}
};
これしか思い浮かばないのですが、やはり振る舞いに不満があります・・・
0177デフォルトの名無しさん
2012/12/24(月) 18:02:26.100178デフォルトの名無しさん
2012/12/24(月) 18:05:01.56そのクラスになんの意味があるの?
ファクトリ関数ではいけないの?
0179デフォルトの名無しさん
2012/12/24(月) 18:23:32.17>>177
すみません知りませんでした、試してみます
>>178
サイズの保証された用途別のvectorを色々なクラスのメンバとして持たせたいと思いました
その名前でメンバとして宣言すればサイズが保証されるようにしたかったのです。
それぞれのクラスの初期化子にconst変数持ち出してサイズ指定するのでは保証できないなと思ったので
0180デフォルトの名無しさん
2012/12/24(月) 20:00:55.67class Base
{
...
public:
virtual ~Base(){}
};
class Derive : public Base
{
...
public:
~Derive(){}
};
このように仮想デストラクタを持つ基底クラスとその派生クラスがあったとします。
派生クラスのインスタンスをfprintfなどで一旦シリアライズし、それをさらに派生クラスとして
デシリアライズし、その派生クラスをdeleteしようとするとエラーがでます
これは、基底クラスの仮想デストラクタがvtableを持ち、シリアライズ・デシリアライズで
ポインタがずれたため、と思って正しいでしょうか?
自分でもいまいち仮想デストラクタのdeleteの挙動について正しく理解できていない気がします
0181デフォルトの名無しさん
2012/12/24(月) 20:11:07.590182デフォルトの名無しさん
2012/12/24(月) 20:15:18.98deleteだけ通らないので何故と思いまして
0183デフォルトの名無しさん
2012/12/24(月) 20:20:08.56気のせい
0184デフォルトの名無しさん
2012/12/24(月) 20:21:22.210185デフォルトの名無しさん
2012/12/24(月) 21:04:06.860186デフォルトの名無しさん
2012/12/24(月) 21:05:20.480187デフォルトの名無しさん
2012/12/24(月) 22:44:00.430188デフォルトの名無しさん
2012/12/25(火) 03:35:29.35結局これなんですよね>deleteは〜
悔い改めました
ちゃんとシリアライズ用データ用意し事無きを得ました
なお、実際のシリアライズ・デシリアライズはあるapiで行ってるので詳細はわかりませんが
恐らくバイナリベタ書きと思われます
0189デフォルトの名無しさん
2012/12/26(水) 02:46:39.53そこで、\nを他の数値に置き換えて書き出し、読み込み時にその数値の部分を\nとして
読み出せばいいやと考えているんですが、日本語環境では絶対に入力されることの
ない数値や、または入力される可能性がすごく低い数値を教えてください
0190デフォルトの名無しさん
2012/12/26(水) 02:48:47.560191デフォルトの名無しさん
2012/12/26(水) 03:40:29.71>読み込むときに楽をする
の目的で
>改行も含め一行で書き出したい
に至った理由が判らん。
単に複数行纏めて読みたいだけならfread()でも使えばいいのに。
0192デフォルトの名無しさん
2012/12/26(水) 07:12:40.470x01〜0x1F の中で通常使われない値、
例えば 0x01 を使えばいいと思われ
0193デフォルトの名無しさん
2012/12/26(水) 09:38:47.890194デフォルトの名無しさん
2012/12/26(水) 11:12:23.41俺のおすすめは\v(vertical tab)。一応改行類だが通常のテキストファイルでは
まず出てこない(俺は今まで見たことが無い)
Unicodeにまで広げていいならU+2028(LINE SEPARATOR)ってのもあるよ
0195デフォルトの名無しさん
2012/12/26(水) 13:20:45.94{
private:
int m_base;
public:
virtual int GetSize() { return( sizeof(this) ); }
};
class Sub : public Base
{
private:
int m_sub;
};
int main(void)
{
Base *pBase = new Sub;
int size = pBase->GetSize(); //※
return(0);
}
自分の環境でコレを試したところ、※の部分で得ることが出来るサイズはBaseの大きさになり、
Subクラス側のpublic部分にBaseと同じ記述の【 virtual int GetSize() { return( sizeof(this) ); } 】を追加しても、
サイズはBaseの大きさのままでした。
このような場合でSubのサイズを取得したい場合は、pBaseをSubにdynamic_castしてから行うか、
サブクラスに【 virtual int GetSize() { return( sizeof( Sub ) ); } 】と記述するしかないのでしょうか?
0196デフォルトの名無しさん
2012/12/26(水) 13:23:41.34× sizeof(this)
○ sizeof(*this)
0197デフォルトの名無しさん
2012/12/26(水) 15:33:10.99VS2012でこれをコードに書くとx64でビルドできません。
Win32ではできます。
みなさんはどうですか?
0198デフォルトの名無しさん
2012/12/26(水) 16:02:14.19プラットフォームツールセットがVisual Studio 2012 (v110)になってるか確認してください
0199改造神
2012/12/26(水) 18:11:04.780200デフォルトの名無しさん
2012/12/26(水) 19:40:57.25ありがとう!
0201デフォルトの名無しさん
2012/12/27(木) 13:57:47.27何をincludeしてどうする必要があるんでしょうか・・・?
MSのmsdn読んでも理解できないし 他のブログなどを探しても見当たりません・・・
とりあえずは傾きをハードから受け取ってprintfなんかで表示できるようになればOKなんですが・・・
どうかお助けください
0202デフォルトの名無しさん
2012/12/27(木) 13:58:02.830203デフォルトの名無しさん
2012/12/27(木) 14:58:42.830204デフォルトの名無しさん
2012/12/27(木) 15:03:22.04どっちもFIFOの要素集合でしかない
0205デフォルトの名無しさん
2012/12/27(木) 16:07:13.24ストリームはそんなことしないんじゃね?
実装はFIFO
0206デフォルトの名無しさん
2012/12/27(木) 16:43:23.30まずOrientationSensorクラスがWindows Runtime classであるってのは理解してる?
0207デフォルトの名無しさん
2012/12/27(木) 16:58:05.48知識としてはわかるけど 完全に理解してるかというと微妙
C++から名前空間や関数を簡単に呼び出すってのは可能なの?
0208デフォルトの名無しさん
2012/12/27(木) 18:11:44.51本質的にはキューは溜めておいたものを取り出すもの、ストリームは今流れているものを取り出すもの
0209デフォルトの名無しさん
2012/12/27(木) 18:12:33.71#include <iostream>
using namespace Windows::Devices::Sensors ;
int main(Platform::Array<Platform::String^>^ args)
{
auto sensor = OrientationSensor::GetDefault();
if (sensor != nullptr){
auto result = sensor->GetCurrentReading();
}
else{
std::wcout << "No orientation sensor found" << std::endl;
}
return 0;
}
前C#で書いたのを書き直してみた
こんな感じで出来ないかな?センサー使えるハードウェアがないからわからない
0210デフォルトの名無しさん
2012/12/27(木) 18:31:51.88その溜めておく場所がキュー
0211デフォルトの名無しさん
2012/12/27(木) 18:38:03.40キューは長さが分かる
0213デフォルトの名無しさん
2012/12/27(木) 23:11:43.08定数のスコープの関係でインターフェイスクラス内にconstな静的メンバ変数を持たせいのですが
それはC++のインターフェイスクラスの概念的にOKなのでしょうか?
また、メンバ関数の動作を保証するために静的メンバ変数を持つというのはOKなのでしょうか?
例えば、そのインターフェイスクラスを継承しているクラスのインスタンスが今現在どれだけ
あるかを得る、というメンバ関数の動作を保証するためには基底クラスのメンバにインスタンスを
カウントするためのstatic intが必要になる。という場合です
0214デフォルトの名無しさん
2012/12/28(金) 00:32:02.27あるソフトウェアを作って、それをユーザーにインストールさせるとき、
ライセンスの問題上ソースコードをダウンロードさせてユーザーの環境で
ビルドさせる必要がある場合、インストーラにgcc(mingw)のバイナリを同梱させて、
ユーザーの環境で無理やりビルドさせるようなことってできるのでしょうか??
昔rubyで作られたマリオをインストールさせる際、rubyの処理系自体を
バイナリで固めたものをダウンロードさせていたものがあったので
似たようなことができるのではないかなと思ったのですが
どうでしょうか
0215デフォルトの名無しさん
2012/12/28(金) 01:02:43.330216214
2012/12/28(金) 01:25:34.28手順としてはこんな感じであってますでしょうか。
1. 214 が作ったソフトウェア(Xとする)のインストーラをユーザーがダウンロードする
↓
2. ユーザーがダウンロードしたインストーラを実行
↓
3. インストーラがMinGWをダウンロード。 Cドライブ直下あたりに配置
↓
4.ソフトウェアXをビルドするためのソースコードをインストーラがダウンロード
↓
5.インストーラがmingwを実行してダウンロードしたソースコードをコンパイル&リンク
↓
6. exeファイルを生成
午後のコーダもそうじゃなかったかな?
0218デフォルトの名無しさん
2012/12/28(金) 07:29:14.66他のクラスのと名前が被ると名前解決は必要だけど
特に問題はないと思う
分かってると思うけど、インタフェースクラスは仮想継承することね
特にインスタンス数をカウントするのなら必須
0219214
2012/12/28(金) 16:27:18.35216の形式でやってみます。
あと別件でお聞きしたいのですが、
c++のpriority_queue で 先頭から2個目の要素をpopを使わずに
取り出したいのですが、何か方法はありませんでしょうか。
queueの性質上先頭から2個めが欲しいというのがそもそも
おかしいとは思うのですが・・
0220デフォルトの名無しさん
2012/12/28(金) 17:29:40.28wfstream fst;
wchar_t buf;
fst.open(file.c_str(), ios::in);
if(fst.fail()) printError(990);
while(fst.get(buf)){
wcout << buf << endl;
}
return 0;
}
上の関数でファイルから一文字ずつ読み込み→出力っていうことをやりたいんですが、マルチバイト文字をうまいことgetしてくれません。。。
どうすれば処理できるようになりますか?
ちなみに入力ファイルの文字コードはUTF-8を想定しています。
0221デフォルトの名無しさん
2012/12/28(金) 17:35:22.70std::wfstream filestream(L"filepath");
filestream.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>));
0222デフォルトの名無しさん
2012/12/28(金) 17:40:44.68ありがとうございます。無名空間も考えてみます
0223デフォルトの名無しさん
2012/12/28(金) 17:41:26.53すみません、開発環境はLinuxです。。。
0224デフォルトの名無しさん
2012/12/28(金) 17:49:21.14そういうのは先に言え
ファイルから全部読みだしてicuあたりを使ってUTF-8からUTF-32に変換して渡してやればいい
0225デフォルトの名無しさん
2012/12/28(金) 17:59:33.51すみませんでした。
icuがよくわからないんで色々調べてみます。
0226デフォルトの名無しさん
2012/12/28(金) 18:23:20.23でもLinuxのlibstdc++はwcoutにimbueしてもスルーされて
グローバルロケール設定しないと動かないっぽいね
0227デフォルトの名無しさん
2012/12/28(金) 18:29:44.34プロンプトの文字コードとか?
0228デフォルトの名無しさん
2012/12/28(金) 18:43:06.68いろんな種類(カテゴリ)の情報を扱うのがロケール
ただしC/C++標準で提供されている物は正直大して役に立たないし
あまり利用されていない気がする
Linuxだとそもそもwchar_tの利用がレアじゃないか?そういう印象があるけど
0229デフォルトの名無しさん
2012/12/28(金) 20:30:05.03priority_queue を継承すれば、
内部利用してるコンテナ c を使ってどうとでもできそう
(ただし仮想デストラクタが無いので注意)
でも、そういう目的なら priority_queue じゃなくて
set 使えばいいんじゃないのかな
0230デフォルトの名無しさん
2012/12/28(金) 21:51:24.15public:
HogeA() {}
〜〜〜
HogeW toHogeW(); //←構文エラー ';' が、識別子 'toHogeW' の前に必要です。
};
class HogeW {
public:
HogeW() {}
〜〜〜
HogeA toHogeA();
};
相互に変換するメンバ関数を持ったクラス宣言はどう書けばいいのでしょうか?
HogeWクラス宣言前にHogeW使ってるからエラーなのだと思うのですが、どう解決すればいいのかわからないです
0231デフォルトの名無しさん
2012/12/28(金) 21:57:22.630232デフォルトの名無しさん
2012/12/28(金) 22:25:35.99class HogeA {
〜〜〜
0233デフォルトの名無しさん
2012/12/28(金) 22:37:50.77Hogeとか書いてる暇があるなら自分で調べろ池沼
それができてないお前のような奴には無理
0234デフォルトの名無しさん
2012/12/28(金) 22:42:59.98解決しなくていいからさっさと回線切れや糞hoge厨。
0235デフォルトの名無しさん
2012/12/28(金) 22:49:41.94ファイルを削除する
0236デフォルトの名無しさん
2012/12/28(金) 22:55:35.36スルーよろ
0237デフォルトの名無しさん
2012/12/28(金) 23:05:41.01hoge使うこととネットで見ず知らずの他人にタダで教えろって情報乞食することは覚えられても
自分に必要な情報を自分で調べることは覚えられないのか
どんなクズにどういう教育受けたらお前みたいなクズに育つの?
自覚ないんだろどうせ、自覚のないクズが一番迷惑
0238デフォルトの名無しさん
2012/12/28(金) 23:22:16.31これでも参考にするといい
そのレベルでいくとこれくらいがちょうど分かりやすいと思う
http://www.google.co.jp/search?q=%E3%81%8A%E5%89%8D%E3%82%A6%E3%82%B6%E3%81%84%E3%82%88
0239デフォルトの名無しさん
2012/12/28(金) 23:27:46.63https://www.google.co.jp/search?q=%E3%81%8D%E3%81%8C%E3%81%8F%E3%82%8B%E3%81%A3%E3%81%A8%E3%82%8B
0240デフォルトの名無しさん
2012/12/28(金) 23:33:45.73それは>>230が人間だった場合にしか伝わらない。
>>230の知能はチンパンジー並。
0241デフォルトの名無しさん
2012/12/29(土) 00:25:59.350242デフォルトの名無しさん
2012/12/29(土) 00:32:07.550243デフォルトの名無しさん
2012/12/29(土) 00:45:44.330244デフォルトの名無しさん
2012/12/29(土) 00:59:17.070245デフォルトの名無しさん
2012/12/29(土) 01:43:33.37hoge使ってる基地害には知恵遅れが多いからな
書籍→検索→質問掲示板
の順じゃなくて、
検索→質問掲示板
って順の基地害が多い
どうかしたらいきなり質問掲示板に来る基地害までいる
0246デフォルトの名無しさん
2012/12/29(土) 01:58:16.040247デフォルトの名無しさん
2012/12/29(土) 03:22:35.28何でこの年の瀬に荒らしにきたの?
0248デフォルトの名無しさん
2012/12/29(土) 05:22:11.35馬鹿じゃね
0249デフォルトの名無しさん
2012/12/29(土) 08:45:56.360250デフォルトの名無しさん
2012/12/29(土) 09:26:39.99public:
Hoge();
};
0251デフォルトの名無しさん
2012/12/29(土) 09:34:09.860252デフォルトの名無しさん
2012/12/29(土) 10:55:34.720253デフォルトの名無しさん
2012/12/29(土) 13:48:59.770254まあ、バカをスルーできない俺も似たようなもんだが (w
2012/12/29(土) 14:03:45.520255デフォルトの名無しさん
2012/12/29(土) 18:49:43.54受け渡すということはわかったのですが、どうしてもうっかりmake_pairなど便利な関数の
返り値を使ってそのまま受け渡しをしてしまったりします。
こういったミスが起きないようにするためのみなさんの心がけや良い方法があったら
アドバイスお願いしたいです。
0256デフォルトの名無しさん
2012/12/29(土) 18:51:33.020257デフォルトの名無しさん
2012/12/29(土) 19:41:21.13ほげぇ
頭悪そう
0258デフォルトの名無しさん
2012/12/29(土) 20:08:34.84ポインタについて自分の認識があっているかを確認させていただけませんでしょうか?
・char* mojiという宣言はmojiというchar型のポインタ宣言なのでmojiに入れるのはアドレス
・関数の宣言の中で、function(char* c)
と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
moji2を入れたければfunction(&moji2)とすればいい
・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?
間違いがあれば指摘していただけませんでしょうか
よろしくお願いいたします
0259デフォルトの名無しさん
2012/12/29(土) 20:19:18.43はい
>・関数の宣言の中で、function(char* c)
>と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
>moji2を入れたければfunction(&moji2)とすればいい
はい
>・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
はい
>・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?
*はいりません
0260デフォルトの名無しさん
2012/12/29(土) 20:20:05.20・char* mojiという宣言はmojiというchar型のポインタ宣言なのでmojiに入れるのはアドレス
Yes
・関数の宣言の中で、function(char* c)
と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
moji2を入れたければfunction(&moji2)とすればいい
Yes
ただし c を文字列として扱う場合は
単一の変数である moji2 のアドレスを入れてはいけない。(危険)
*c = 'A'; のように単一の文字を返すためにポインタを使ってるなら問題ないけど、
文字列なら配列を渡すこと。
・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
初期化できるけど意味合いが異なる。
配列 tekito の初期化の場合は配列が指定した文字列で初期化され、
ポインタ tekito2 の初期化の場合は文字列リテラル "waiwai" がメモリ上のどこかに置かれ、そこへのアドレスで初期化される。
あと、文字列リテラルは変更不可なので、const char* でないと危険。
C++11 で正式に const がないとだめになったが、C++03 までは互換性のために許容されている。(だったよね?)
配列の場合は tekito[10] の領域に "waiwai" がコピーされるので、変更しても問題ない。
・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?
tekito[1] = 'z';
0261デフォルトの名無しさん
2012/12/29(土) 20:52:48.41C++でautoを使ってる人をほとんど見かけません。何か理由があるんでしょうか。
C#からC++に入った私は結構使ってるんですが、やめたほうがいいですか。
0262デフォルトの名無しさん
2012/12/29(土) 21:02:03.75ありがとうございます!
参考にさせていただきます
0263デフォルトの名無しさん
2012/12/29(土) 21:05:01.11初期化の構文が違うから
0264デフォルトの名無しさん
2012/12/29(土) 21:27:42.87C++11 の機能だから。
0265デフォルトの名無しさん
2012/12/29(土) 21:37:53.92最近追加された機能だから
サポートしてないコンパイラを使ってると当然使えない
0266デフォルトの名無しさん
2012/12/29(土) 21:43:42.78>ただし c を文字列として扱う場合は
>単一の変数である moji2 のアドレスを入れてはいけない。(危険)
>*c = 'A'; のように単一の文字を返すためにポインタを使ってるなら問題ないけど、
>文字列なら配列を渡すこと。
function(char* c[ ])としておかないといけないということでしょうか??
例えばchar* cで受けて、実装で文字列に変換することはできないのでしょうか?
ポインタcからポインタを進めて0が入ってるところまでをメモリを確保した先にコピーするようなことはできないのでしょうか?(あまり意味のない実装だとは思いますが…)
0267デフォルトの名無しさん
2012/12/29(土) 21:49:23.36function(char* c) のまま
char mojiretsu[128];
function(mojiretsu);
と渡す
0268デフォルトの名無しさん
2012/12/29(土) 21:49:33.390269デフォルトの名無しさん
2012/12/29(土) 22:01:00.06それは配列は先頭のポインタが格納されているからという理解でよいでしょうか??
0270デフォルトの名無しさん
2012/12/29(土) 22:03:29.29配列にはポインタなど格納されていない
mojiretsu はポインタに変換出来て
その値は配列の先頭アドレス (&mojiretsu[0]) になるというだけ
0271デフォルトの名無しさん
2012/12/29(土) 22:06:22.13理解しました!ありがとうございます!
0272デフォルトの名無しさん
2012/12/31(月) 15:19:47.08public:
virtual CObject* GetPtr(void) const {return this;}
};
↑のようなクラスを作ってコンパイルすると
「error C2440: 'return' : 'const CObject *const ' から 'CObject *' に変換できません。」とエラーになってしまいます
constメンバ関数の中でメンバに対する変更は行えないのは知ってますが
メンバに対する変更をしているのではなく、ただポインターを返そうとしているだけなのになぜエラーになるのでしょう?
0273デフォルトの名無しさん
2012/12/31(月) 15:36:21.580274デフォルトの名無しさん
2012/12/31(月) 15:40:08.36試しに
virtual const CObject* GetPtr(void) const{return this;}
にしたら通った
0275デフォルトの名無しさん
2012/12/31(月) 18:50:45.94constメンバ関数は戻り値もconstってことなんですかね
0276デフォルトの名無しさん
2013/01/01(火) 00:20:46.760277デフォルトの名無しさん
2013/01/01(火) 11:50:04.46reinterpret_castして、その値をもう一度ポインタにreinterpret_castした場合、そのポインタは
元の通りの動作をしてくれるのでしょうか?
0278デフォルトの名無しさん
2013/01/01(火) 12:22:06.408バイト値に入れればいいと思うぞ
0279デフォルトの名無しさん
2013/01/01(火) 12:23:23.34intptr_t型が使えるならそれ使っとけ
0280デフォルトの名無しさん
2013/01/01(火) 12:23:55.210281デフォルトの名無しさん
2013/01/01(火) 13:29:54.320282デフォルトの名無しさん
2013/01/01(火) 13:45:25.740283デフォルトの名無しさん
2013/01/01(火) 14:27:33.780284デフォルトの名無しさん
2013/01/01(火) 20:54:31.38今までは文字列を適当にハッシュ化してからインサートしてたんですが、
unordered_mapなら理論上1回しか比較しないからstringのままでも十分速いんでしょうか?
0285デフォルトの名無しさん
2013/01/01(火) 21:46:24.420286デフォルトの名無しさん
2013/01/01(火) 21:49:21.67ハッシュ化だけだとハッシュが被ったら困るぞ >map
ハッシュが被った場合は string を使って管理しないと
unordered_map はまさにハッシュで管理するので string のままでも速いし
ハッシュが被った場合に string の比較もやってくれる
0287デフォルトの名無しさん
2013/01/01(火) 23:15:52.46なんと素晴らしい!ありがとうございました
0288デフォルトの名無しさん
2013/01/02(水) 00:42:10.920289デフォルトの名無しさん
2013/01/02(水) 03:06:43.030290デフォルトの名無しさん
2013/01/02(水) 04:17:54.860291デフォルトの名無しさん
2013/01/02(水) 05:40:29.320292デフォルトの名無しさん
2013/01/02(水) 18:05:49.36class IHelper {
public:
virtual ~IHelper() {}
template <class T>
virtual T Get() = 0;
};
template <class T>
class TypeHelper : public IHelper {
private:
T val;
public:
virtual ~TypeHelper() {}
template <class T>
virtual T Get() {return val;}
};
//main
std::vector<IHelper*> test;
test.pushback(new TypeHelper<int>);
test.pushback(new TypeHelper<float>);
int i = test.at(0)->Get();
float f = test.at(1)->Get();
このようなことはできるのでしょうか?
0293デフォルトの名無しさん
2013/01/02(水) 18:48:41.29boost::any のような variant 型を使うしかないね
0294デフォルトの名無しさん
2013/01/02(水) 19:09:09.07ありがとうございます。やはりスクリプトは偉大ですね
0295デフォルトの名無しさん
2013/01/02(水) 19:18:59.08そのままでは危険なので一工夫あった方がいいが
0296デフォルトの名無しさん
2013/01/02(水) 22:45:19.910297デフォルトの名無しさん
2013/01/03(木) 02:12:22.20ウィンドウにウィジェット(入力BOX、ボタン)を組み込んで、
それらを使いボタンを押すたびに円が表示されるようにします。
さらに、その円をそれぞれキーボードなどで動かしたいと思っていたのですが
解決法が見つかりませんでした。ヒントでもいいので教えてください。
ヘッダファイルなどはこちらのものを使っています↓(主にgarph,point,window)
http://www.stroustrup.com/Programming/Graphics/
0298デフォルトの名無しさん
2013/01/03(木) 02:17:39.38void Func(class A& a);
みたいな宣言はできますよね
このクラスがnamespace Nのなかだった場合は同宣言すべきですか?
void Func(class N::A& a);
のようなことがやりたいのですが
using namespaceすべき?
0299デフォルトの名無しさん
2013/01/03(木) 02:19:24.10{
class A
}
void Func( N::A &a );
0300デフォルトの名無しさん
2013/01/03(木) 02:31:33.56運用的には、namespaceとその中の宣言だけのファイルとかあったほうが良いのですかね
まあ運用は自分でも考えてみます
ありがとうございます
0301297
2013/01/03(木) 03:15:16.73circle型のヴェクタ使えばできるんですね
0302デフォルトの名無しさん
2013/01/03(木) 14:11:16.10「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」
と怒られます。どうすればいいのでしょうか
ConfLoader.cpp:
#include "ConfLoader.h"
class ConfLoader {
char *Get (char *name) {
こーど
}
}
ConfLoader.h:
class ConfLoader {
public:
char *Get (char *name)
}
Display.h:
#include "ConfLoader.h"
Display.cpp:
#include "Display.h"
void Display::updateNotify() {
Lang::Get("文字列");
}
0303デフォルトの名無しさん
2013/01/03(木) 14:57:06.170304デフォルトの名無しさん
2013/01/03(木) 16:13:14.56"class ConfLoader"でなく
"class Lang"です。
0305デフォルトの名無しさん
2013/01/03(木) 17:10:57.10そのGet()関数は静的関数じゃない
↓
なんらかのインスタンスを使って呼び出さないと
↓
Lang lang;
lang.Get("もじれつ");
または
Lang lang = new Lang;
lang->Get("もじれつ");
0306デフォルトの名無しさん
2013/01/03(木) 17:19:12.52ConfLoader.h:
class ConfLoader {
public:
static char *Get (char *name)
}
ただしこれは「こーど」の内容次第
(非staticメンバ変数依存)では不可能
0307デフォルトの名無しさん
2013/01/03(木) 22:53:25.91分かりました
0308デフォルトの名無しさん
2013/01/04(金) 01:15:30.49動く前に次のループに入ってしまっているのでしょうか?
//ループしている間a(x座標),b(y座標)ずつ円が動く
char c;
while(1){
cin >> c;
if(c == 'q') {gui_main();} //ループを抜ける
circle.move(a,b);
}
0309デフォルトの名無しさん
2013/01/04(金) 01:26:05.840310デフォルトの名無しさん
2013/01/04(金) 01:44:47.03これは恥ずかしい
どうやって抜けようか・・・
0311デフォルトの名無しさん
2013/01/04(金) 02:01:33.030312デフォルトの名無しさん
2013/01/04(金) 02:06:26.68char c;
while(1){
c=cin.peek();
if(c == 'q') {gui_main();} //ループを抜ける
circle.move(a,b);
}
0313312
2013/01/04(金) 03:29:47.52http://codepad.org/rQHVgGeZ
初めてc++でコードを書いたので見にくいかもしれませんが、このコードのおかしい部分を教えてくれませんか?
分かっている問題点は「円が動いてくれない」と「ループから抜けて制御をgui_main()に戻らない」の二点です。
fltkとヘッダファイルはこちらを使いました
http://www.stroustrup.com/Programming/Graphics/
0314デフォルトの名無しさん
2013/01/04(金) 04:17:10.17これでいいんじゃね?
#include <conio.h>
while(1){
if(_kbhit() && (_getch() == 'q')) {gui_main();} //ループを抜ける
circle.move(a,b);
}
0315デフォルトの名無しさん
2013/01/04(金) 09:59:04.75もし標準準拠の範囲でやるのなら11使ってマルチスレッド化だな
0316デフォルトの名無しさん
2013/01/04(金) 11:00:42.42> たしかpeekも入力があるまで待つはずだけど
仕様見てないけど、peek という名前で入力待ちするような設計をする奴はアホだと思う。
0317312
2013/01/04(金) 15:04:25.02レスありがとうございます!
ですがstart()に入った瞬間プログラムが終了してしまいます。
入力待ちの方は問題ないと思うので、別のところにミスがあるようです。。
0318デフォルトの名無しさん
2013/01/04(金) 16:50:41.35よくわからんけど
236行目は
> int main()
> try{
> …
じゃなくて
> int main()
> {
> try{
> …
じゃないかな
0319デフォルトの名無しさん
2013/01/04(金) 18:06:18.180320317
2013/01/04(金) 19:29:49.32http://codepad.org/I2kQrJae
ヘッダファイルに問題がある(?)ようで、こんがエラーが出てきました
どういうことなのでしょうかさっぱり分かりません
http://www.dotup.org/uploda/www.dotup.org3809134.png.html
0321デフォルトの名無しさん
2013/01/04(金) 19:32:17.080322デフォルトの名無しさん
2013/01/04(金) 19:39:24.03ここで落ちてるようで
ソース見たところvdx_dyにpushしてるところが一つもないんだが
そりゃランタイムエラー出るわな、要素が一つもないのにアクセスしようとしてるんだから
0323デフォルトの名無しさん
2013/01/04(金) 20:44:08.12LinuxでFLTKの最新stableのv1.3.2を入れて、ディレクトリに
> ttp://www.stroustrup.com/Programming/Graphics/
を置いて
> ttp://codepad.org/rQHVgGeZ
を313.cppで置いてmakeしたけど通りません。
313.cpp: In constructor ‘Coulomb_window::Coulomb_window(Point, int, int, const String&)’:
313.cpp:63:3: error: class ‘Coulomb_window’ does not have any field named ‘Window’
313.cpp:76:13: error: ‘attach’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::add()’:
313.cpp:157:21: error: ‘attach’ was not declared in this scope
313.cpp:161:21: error: ‘attach’ was not declared in this scope
313.cpp:164:9: error: ‘redraw’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::quit()’:
313.cpp:210:7: error: ‘hide’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::reset()’:
313.cpp:226:22: error: ‘detach’ was not declared in this scope
と出ます。
どうすれば良いのでしょう。
0324デフォルトの名無しさん
2013/01/04(金) 20:46:15.05もっと使いやすい新しいの無いんですか?
0325デフォルトの名無しさん
2013/01/04(金) 20:49:40.150326デフォルトの名無しさん
2013/01/04(金) 20:59:36.340327デフォルトの名無しさん
2013/01/04(金) 21:12:41.24配列の添字が範囲外になっているという例外
0328デフォルトの名無しさん
2013/01/04(金) 21:16:13.860329デフォルトの名無しさん
2013/01/04(金) 21:21:55.45そりゃそうだ。
例外安全でないってことは例外発生時にメモリリークやデータ破壊が
起こるってことで、そんなの実装がバグってるってことだろ。
具体的に何を疑ってるのかよくわかんないけど。
0330317
2013/01/04(金) 21:30:08.27それは困るので戻しておきます
>>322
やっぱりですか、これはだめですよね
それも含めて少し訂正してstart()関数を使ってみたところ
ボタンが固まっているのでループはしているようです、ただ円は動いてくれませんでした。。。
http://codepad.org/h9QogXXh
>>327
配列の添字を変えたりはしていませんし、pushのし過ぎというのも考えにくですね
原因は何なのでしょう。。だんだんと動いてくれないのが不思議になってきました。
引き続きランタイムエラーを探してみます
0331デフォルトの名無しさん
2013/01/04(金) 21:32:54.46ステップ実行しろい
0332デフォルトの名無しさん
2013/01/04(金) 21:56:01.24よく知らないけど普通の GUI フレームワークならそう。
今の状態なら FLTK で開いたウィンドウじゃなくて
起動したコンソール側でキー叩けば反応するかもね。
0333デフォルトの名無しさん
2013/01/04(金) 22:11:41.38>分かっている問題点は「円が動いてくれない」と「ループから抜けて制御をgui_main()に戻らない」の二点です。
これ多分同じ問題だと思うけどね。
>ボタンが固まっているのでループはしているようです、ただ円は動いてくれませんでした。。。
ボタンが固まっている=再描画ルーチンとかその辺に処理が回っていない=「円が動いてくれない」&&「ループから抜けて制御をgui_main()に戻らない」
だと思う。
イベント駆動の考え方に慣れてないんだと思うけど、
1) とりあえず1つ円を表示するだけ
2) 1つ円を表示、キー入力がある毎に円が移動
3) 1つ円を表示、キー入力があるまで移動(タイマーイベントとかを使う)
4) 複数の円でできるようにする
とか、ステップ踏んでいく方がいいと思うよ。
0334デフォルトの名無しさん
2013/01/04(金) 22:13:50.22意外と役に立つ
0335317
2013/01/04(金) 23:08:17.84ステップ実行かなり便利ですね!!くせになりそうです
エラーをどんどん見つけているところです
a,b=0; とするとbだけ初期化されてaはされないんですね。。
>>332
>>333
>>334
その通りでした、ループに入ってすぐにランタイムエラーが出てました
ステップ実行でも無理ならそうしようと思います。
0336335
2013/01/05(土) 02:38:35.80http://codepad.org/x6UThpod
ですが、ループ中は全く円は移動してくれません。
ループを'q'で抜けて再びadd()関数で円を追加したり、ウィンドウの大きさを変更したりすると円が瞬間移動します。
>>333さんの方法で書いてみてたところ上と同じような事になりました。
http://codepad.org/GnZHzOVr
最初から円を配置しておいて、startボタンを押すとループに入ります。
ループ中にキーボードの'a'を押すたび右へ少しずつ動くようにしてありますが、ループ中は全く動いてくれません。
そして'q'でループを抜けると一気に右へ'a'を押した分だけ瞬間移動します。
リアルタイムでの描画が出来ていないようです、何かいい方法はありませんか?
0337デフォルトの名無しさん
2013/01/05(土) 03:36:17.85描画を行なわせるための仕掛けが用意されているはずなので、それを使えばいい。
イベントドリブンなライブラリならイベントフラッシュ、描画エリアの無効化などのキーワードを参考に。
0338デフォルトの名無しさん
2013/01/05(土) 09:30:41.31全然分かってねええええええええええええええええ。
自分でイベント待ちのループを回すという発想をやめよう。他の部分に処理が回らない。
FLTK 良く分からないけどこれで動かない?
struct Coulomb_window :Window{
// 略 ↓追加
public:
int handle(int); // in Fl_Widget
};
void start() {} // とりあえず空にする
// ↓追加
void handle(int e)
{
int ret = 0;
switch (e) {
case FL_FOCUS:
case FL_UNFOCUS:
ret = 1;
break;
case FL_KEYDOWN:
if ( Fl::event_key('a') ) { ret = 1; circle.move(10,0); }
break;
}
return ret || Fl_Window::handle(e);
}
>337
彼は redraw() は呼んでる。なので InvalidateRect() なり RedrawWindow() は多分呼ばれてる。
自分でループを回していてそこから抜けないので WM_PAINT を処理するメッセージループまで処理が戻ってないんだ。
0339335
2013/01/05(土) 16:44:17.46なるほど、自分でループを作るのではなくてgui自体のループを利用するってことですよね
'a'を押しても円はは動いてくれませんでした。。
widgetの操作には反応するのに、キーボードからの入力には反応しないのでしょうか
fltkで検索してもあまり引っかからないですね、マイナーなのかな
0340335
2013/01/05(土) 16:57:44.02void start()
{
circle.move(10,0);
redraw();
};
にするとうまく動きました。
どしても起点がwidgetにあるようです、キーボー入力起点もできればいいのですが。。
なんだか目標の無限ループが遠のいていくようです
0341デフォルトの名無しさん
2013/01/05(土) 17:28:09.51ごめん。俺が redraw() つけるの忘れてた。
if ( Fl::event_key('a') ) { ret = 1; circle.move(10,0); redraw(); }
でどうだろう。
うちの環境(Cygwin)だと、なぜか Fl::event_key('A') にしないと動かなかったんでその辺も試してみて。
0342デフォルトの名無しさん
2013/01/05(土) 17:40:55.81ttp://ideone.com/KXvQw1
0343デフォルトの名無しさん
2013/01/05(土) 17:46:35.50this_->circle.move(10,0); this_->redraw();
の部分を適宜書き換えてくれ。動きを止めたければ repeat_timeout を呼ばないようにすればいい。
0344335
2013/01/05(土) 17:53:06.67動きました、ありがとうございます!
これからいろいろ試してみます
0346335
2013/01/05(土) 22:39:50.09元のプログラムに>>342を組み込もうと思ったのですが、Fl_系,timeout系の関数の使い方が分かりません。。
検索してもなかなか引っかからないのですが、使い方が乗っているHPなどはありませんか?
もう一つ
int handle(int)
void start()
timeout_callback(void*)
この3つはどう関連しているのでしょうか?
ステップ実行を使っても今並べた順番で動いているということしか分かりませんでした。。
0347デフォルトの名無しさん
2013/01/05(土) 23:15:46.02FLTK の公式サイトのドキュメント http://www.fltk.org/doc-1.3/index.html 見ても分からないってことだよねぇ。
Fl_Gl_Window になってるけど基本的な考え方は↓が参考になると思う。FL::add_timeout でぐぐったら 7 番目に出てきた。
http://www.slis.tsukuba.ac.jp/~fujis/cgi-bin/wiki/index.php?Fl_Gl_Window%A4%C7%A4%CE%A5%A2%A5%CB%A5%E1%A1%BC%A5%B7%A5%E7%A5%F3
>int handle(int)
>void start()
>timeout_callback(void*)
>この3つはどう関連しているのでしょうか?
まず、CUI のプログラムを書いてるときは自分が次々に関数を呼び出していく形だけど、
GUI のプログラムでは次々に自分が呼び出される形になるってのはまず押さえといてくれ。
handle() は他のと無関係で関連してない。キー入力に対応する分のコードを消し忘れてただけ。
FLTK 内部のループに入ってるときに何かイベントが発生したら都度呼び出される。
キー入力だけじゃなくてマウスの移動とかクリックでも呼び出されてる。
で他の2つについて。
start() の中の
Fl::add_timeout(0.1, timeout_callback, static_cast<void*>(this));
によって、0.1 秒後に timeout_callback() を呼び出して欲しい、と FLTK に指示している。
で、(FLTK 内部のループから) timeout_callback() が呼び出されたときに移動処理と再描画を指示した上で、
Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
で、再度 0.1 秒後に timeout_callback() を呼び出して欲しい、と指定している。
以下繰り返し。
handle() も start() も timeout_callback() も FLTK 内部のループから呼び出されるってことは同じだね。
0348335
2013/01/06(日) 02:53:34.63ありがとうございます、納得しました!
どうやらtimeout_callback(void*) が静的らしく非静的のCalculation_of_powervoid()が中で使えないようなので
repeat_timeoutでコールバックして使おう思ったのですが
「型"void(Coulomb_window::*)(void *pp)"の引数は型"Fl_Timeout_Handler"のパラメータと互換性がありません」
とエラーが出ます。
void Coulomb_window::Calculation_of_power(void* pp)
{} //ppは使用していない
と修正し
void timeout_callback(void* ptr)
{
void* p;
Fl::repeat_timeout(0.1, Coulomb_window::Calculation_of_power, p); //Coulomb_window部分にエラー
Coulomb_window* this_ = static_cast<Coulomb_window*>(ptr);
this_->circle.move(10,0); this_->redraw();
Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
}
と書いています。エラーの原因は何でしょうか?
ちなみにビルドエラーでは
「 error C3867: 'Coulomb_window::Calculation_of_power': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&Coulomb_window::Calculation_of_power' を使用してください」
と表示されます。
0349348
2013/01/06(日) 02:57:41.89Calculation_of_power()の中には非静的なものが含まれているのでstaticは使えませんでした
0350デフォルトの名無しさん
2013/01/06(日) 04:20:11.77どうにかしてstaticな関数にしないと無理
0351デフォルトの名無しさん
2013/01/06(日) 08:39:02.76もちっと考えようや。
circle だって非静的メンバでしょ。
きっとそうなろだろうと思って this_ ポインタ用意したのに。
this_->Calculation_of_power(); の形式で呼んでください。
念のために言っとくと this ポインタみたいに使うってことで、
this_ という名前にしただけで this とは別物だしそういう
機能が有るわけでもないからね。
0352デフォルトの名無しさん
2013/01/06(日) 08:57:31.53>GUI のプログラムでは次々に自分が呼び出される形になるってのはまず押さえといてくれ。
って書いちゃったから混乱させちゃったかもしれないけど、必ず FLTK 側から呼びださせなければ
いけないわけではなくて、必要な処理だけして十分短い時間で処理を戻せばいいです。
んで、Calculation_of_power() って毎回やらせたい移動処理なんだから move の代わりに、
void timeout_callback(void* ptr)
{
Coulomb_window* this_ = static_cast<Coulomb_window*>(ptr);
// 毎回必要な処理があったらこの辺に追加していく
// 非静的メンバ関数1つにまとめておいてそれ呼び出した方が見通しがいいかもしれないけど。
this_->Calculation_of_power();
this_->redraw();
Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
}
ってすればいいです。
ちなみに、この静的、非静的の問題というか枠組みは cb_start() と start() でも発生していて、
FLTK からは静的な cb_start() を呼んでもらって、cb_start() から非静的な start() を呼び出してる。
reference_to<Coulomb_window>(pw). にあたるのが this_-> とその前のキャスト。
参照とポインタという違いはあるけどね。
0353デフォルトの名無しさん
2013/01/06(日) 09:06:27.060354デフォルトの名無しさん
2013/01/06(日) 09:11:05.29あー、あと忘れてた。
>どうやらtimeout_callback(void*) が静的らしく非静的のCalculation_of_powervoid()が中で使えないようなので
現状の timeout_callback() は非静的メンバ関数ですらなくて通常の関数。フリー関数と呼んだりもする。
ただし friend 指定をつけて無理矢理 private メンバをアクセスできるようにしたりしてる。
それなら静的メンバ関数にする方が自然だし friend 指定も消えるので(一般的に friend は避けるべき)、
friend void timeout_callback(void*);
→
static void timeout_callback(void*);
void timeout_callback(void* ptr)
→
void Coulomb_window::timeout_callback(void* ptr)
とした方が良かった。名前も cb_timeout にした方が他と揃っていいかもね。
cb_ は callback (FLTK から呼び出される)の意味で付けてるはず。
0355デフォルトの名無しさん
2013/01/06(日) 09:18:50.440356デフォルトの名無しさん
2013/01/06(日) 09:22:57.82まあお人好しな暇人が多くて良かったね、と
0357349
2013/01/06(日) 09:24:57.59もし今後この質問を私のふりをしてぶり返す人がいてもそれは
私の偽物ですので無視してください。
ご迷惑をお掛けしました
0358349
2013/01/06(日) 09:49:29.48間に受けないでください
0359348
2013/01/06(日) 14:13:45.18今考えればどうしてこうthis_->Calculation_of_power(); しなかったのが不思議です
おかげでほとんど完成しました、親切にありがとうございました
もっと勉強が必要ですね、初心者になれたらまたきます
なんだかF10とF11のテンキーが欲しくなってきました
0360デフォルトの名無しさん
2013/01/07(月) 04:00:31.98ある関数の成否を判断する必要があって、かつ例外を出すほど大袈裟ではないとき、
どういう作りにするのがスタンダードでしょうか。
特に理由がない限り、成功時は戻り値にマジックナンバーで0を、失敗時は-1を返すくらいで問題ないでしょうか。
0361デフォルトの名無しさん
2013/01/07(月) 04:08:54.49C++さんに物申す。
特に理由がない限り、成功時は戻り値にtrueを、失敗時はfalseを返すくらいでも問題ないかと。
0362デフォルトの名無しさん
2013/01/07(月) 04:09:25.380363デフォルトの名無しさん
2013/01/07(月) 04:20:38.34ありがとう。
0364デフォルトの名無しさん
2013/01/07(月) 07:21:02.020365デフォルトの名無しさん
2013/01/07(月) 09:23:21.820366デフォルトの名無しさん
2013/01/07(月) 10:02:35.64お前か宿題スレにありもしない問題を書いたのは
0367デフォルトの名無しさん
2013/01/07(月) 15:26:59.890368デフォルトの名無しさん
2013/01/07(月) 17:57:12.680369デフォルトの名無しさん
2013/01/07(月) 19:28:20.08標準関数じゃmainとsystemくらいじゃね
OSのAPIじゃよくあるけど
0370デフォルトの名無しさん
2013/01/07(月) 19:40:09.58揃える用のインライン関数
0371デフォルトの名無しさん
2013/01/07(月) 19:42:22.880372デフォルトの名無しさん
2013/01/07(月) 19:52:49.83シェルの都合
0373デフォルトの名無しさん
2013/01/07(月) 21:03:39.70最近少し増えた。
C11のerrno_tとC++11のerror_codeクラス(それぞれ別物)。
0374デフォルトの名無しさん
2013/01/07(月) 21:05:17.85比較するようにオーバーロードされているようですが、
unordered_mapのハッシュ化には対応しているでしょうか?
0375デフォルトの名無しさん
2013/01/07(月) 21:13:24.760376デフォルトの名無しさん
2013/01/07(月) 21:19:58.85#define SUCCESS 0 とでもしておいて
return SUCCESS; とか if (result == SUCCESS) って書けば不自然さはない
main の戻り値も return EXIT_SUCCESS; って書いとけ
0377デフォルトの名無しさん
2013/01/07(月) 21:32:29.800378デフォルトの名無しさん
2013/01/07(月) 21:32:51.660379デフォルトの名無しさん
2013/01/07(月) 21:35:37.710380374
2013/01/07(月) 21:58:29.88weak_ptrはリファレンスにもないみたいですね
0381デフォルトの名無しさん
2013/01/07(月) 21:58:33.390382デフォルトの名無しさん
2013/01/07(月) 22:38:37.28今はstd::mapとowner_lessで我慢するしかない。
0383デフォルトの名無しさん
2013/01/07(月) 23:30:25.62ハッシュくらいいくらでも指定すればええんでないの
0384デフォルトの名無しさん
2013/01/07(月) 23:30:58.07○標準でサポートされてるかは知らんが
0385デフォルトの名無しさん
2013/01/07(月) 23:47:01.52{
public:
explicit Hoge(int v) : v_(v) {}
explicit Hoge(const std::string& v) : v_(v) {}
private:
boost::variant<int, std::string> v_;
};
こういうようなクラスがあって、
Hoge a(...);
if (a == "foo" || 4545 > a) ...;
というようにやりたいんですが、比較演算子を1個ずつ対応する型ごとに全部実装しないとダメですか?
0386デフォルトの名無しさん
2013/01/08(火) 00:06:32.26const boost::variant<int, std::string>& v() const { return v_; }
を作るくらいしか
0387デフォルトの名無しさん
2013/01/08(火) 01:02:57.914545 > Hoge("bar") なんてのをどう定義するつもり?
0388デフォルトの名無しさん
2013/01/08(火) 01:03:38.86荒らすな基地害
0389デフォルトの名無しさん
2013/01/08(火) 01:06:09.40比較の仕様によってはテンプレート使って数を減らすこととかは出来るでしょ
0390デフォルトの名無しさん
2013/01/08(火) 01:12:28.25荒らしの相手をしないでください。
0391デフォルトの名無しさん
2013/01/08(火) 13:19:42.10Hoge
Hoge
Hoge
こいつ本物のクズだろw
0392デフォルトの名無しさん
2013/01/08(火) 22:40:34.16template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return ( pair<T1,T2>(x,y) ); //←※
}
※の部分で生成したペアを直接返していますが、つまりこれは
T1かT2にshared_ptを指定すると事故ってしまう場合があるということでしょうか?
0393デフォルトの名無しさん
2013/01/08(火) 22:47:18.590394デフォルトの名無しさん
2013/01/08(火) 22:48:10.520395デフォルトの名無しさん
2013/01/08(火) 22:58:43.61make_pair( "TestID", shared_ptr<int>(new int(10)) );
あくまでこのようなnewしたポインタで一時的なshared_ptrを生成するのが危ないのであって
この使い方はmake_pairに限ったことではなかったのですね。失礼いたしました。
0396デフォルトの名無しさん
2013/01/08(火) 23:11:34.96その例だと他で例外発生しないから大丈夫だと思うけど、
一般的には
shared_ptr<int> p(new int(10));
と構築してから
make_pair("TestID", p);
とすれば何の危険も無い
0397デフォルトの名無しさん
2013/01/09(水) 00:35:53.74make_shared<int> (10) に置き換えれば安全
0398デフォルトの名無しさん
2013/01/09(水) 01:49:42.04インクルードするのが原則らしいですが、そのヘッダファイル内では
必要のない情報(例えばソース側でしか使用しないヘルパ関数や、
ヘッダファイルで使うインターフェイスクラスのImplを記述したファイルなど)
はソースとヘッダのどちら側でインクルードするのが望ましいのでしょうか?
インターフェイスの実装部分などは隠蔽・分散の概念からするとソース側で
インクルードしたいのですが、原則がノドにつっかえる気分です
0399デフォルトの名無しさん
2013/01/09(水) 02:16:58.94何その原則初めて聞いたんだが
普通にソースで必要なヘッダをインクルードしろよ
実装の都合でヘッダファイルにインクルード晒すとかないわ
0400デフォルトの名無しさん
2013/01/09(水) 02:18:27.28宣言と定義の違いを正しく認識できたらまたきてください。
0401デフォルトの名無しさん
2013/01/09(水) 03:49:19.07マジっすかありがとう!隠蔽しまくるわ
0402デフォルトの名無しさん
2013/01/09(水) 08:02:06.67その原則が業務上の縛りならそれを護るのが筋だがな。
0403デフォルトの名無しさん
2013/01/09(水) 20:02:18.060404デフォルトの名無しさん
2013/01/09(水) 22:34:43.92害しかないような縛りは改善しろよ。それが「業務」ならなおさら。
0405デフォルトの名無しさん
2013/01/10(木) 12:44:16.52こっちが死なないためにはそうするしかない
0406デフォルトの名無しさん
2013/01/10(木) 16:34:16.87外部に公開する必要はないんだけど、定数やら宣言やらを切り分けて1ファイルにしたい時ってどうしてる?
一切禁止のところから、ヘッダファイル名に一定のルールを付ける(拡張子等)ところ、
あるいは、あまり気にせずに普通に外部用ヘッダに書いてしまうとか、色々あると思うけれど。
0407デフォルトの名無しさん
2013/01/10(木) 17:20:07.61非公開な定義とか;
#endif
みたいにするのが最近の俺のやり方
0408デフォルトの名無しさん
2013/01/10(木) 18:01:03.46翻訳単位に閉じてるって意味なら、ヘッダには書かない
モジュール/ライブラリプライベートって意味なら、公開ヘッダには書かず
非公開ヘッダに書く(両者を分けるのが重要)
0409デフォルトの名無しさん
2013/01/10(木) 18:26:28.48class Test
{
private:
shared_ptr<int> m_spInt;
public:
Test() { m_spInt.reset( new int); } //コンストラクタ
int Get() { return (*m_spInt); }
void Set(int val) { (*m_spInt) = val; }
};
int main(void)
{
Test test;
test.Set(100); //※
cout << test.Get() <<endl;
return 0;
}
これを実行すると※の行で「test.m_spIntは空だよ」と怒られてしまうのですが
↑のようにメンバ関数内(ここではコンストラクタ)でshared_ptrに対しresetで
newした実態を渡しても意味がないのでしょうか?(関数から抜ける時に消滅してしまうのでしょうか)
0410デフォルトの名無しさん
2013/01/10(木) 18:38:28.17別に怒られんが
もっと環境を晒せよ
0411デフォルトの名無しさん
2013/01/10(木) 18:47:33.84どうもありがとう、
そしてご指摘どおりコンストラクタの記述ミスってただけでした、本当に申し訳すみません・・・
0412406
2013/01/10(木) 18:53:33.61上手いなそれ。
foo.cppに対するfoo.hのような、正しいところからインクルードする際の手間は増えるけど、
コンピュータ側からも人間の目でも、インクルードミスをミスだと判断できるのは良いよね。
>>408
非公開ヘッダにするとき、何かやってることはある?
0413デフォルトの名無しさん
2013/01/10(木) 19:26:40.44struct Events
{
int numEvents; ///< number of Events in array
Event* events[2]; ///< event pointer array, variable size
};
使用しているライブラリの中に上記のような構造体が定義されていたのですが、
この構造体のメンバのeventsにはEvent*のポインタがいくつでも入れられるのでしょうか。
///< event pointer array, variable size
とあるのでそのように見えるのですが、
では events[2] の 2は一体なんなのだろうと思っています。
いくつでも可ではなく、2個までしか入れられないのでしょうか。
ご教示いただけると嬉しいです。
0414デフォルトの名無しさん
2013/01/10(木) 19:28:55.90どうしても公開せざるを得ない場合は
boost の detail 名前空間みたいなのを作って
内部使用用ですよと分かるようにする
0415デフォルトの名無しさん
2013/01/10(木) 19:38:10.02ポインタの配列だから
ふつうに予想すればリンクどリスト
0416413
2013/01/10(木) 19:53:54.35連結リストとのことですが、それと2という数字はどう関わりがあるのでしょうか
events[2]
で連結リスト表すといった慣習があるのでしょうか??
0417デフォルトの名無しさん
2013/01/10(木) 19:57:17.46どうしても知りたければライブラリ製作者に直接聞けばいい
0418デフォルトの名無しさん
2013/01/10(木) 20:00:18.410419デフォルトの名無しさん
2013/01/10(木) 20:09:07.38Events の中に Event があるんだから前後はなくない?
beginとendだと思われる
0420デフォルトの名無しさん
2013/01/10(木) 20:11:37.37配列って言ってるしそうかもな
0421デフォルトの名無しさん
2013/01/10(木) 20:14:54.10上向き下向きを一つのコードで扱えるから
0422デフォルトの名無しさん
2013/01/10(木) 21:06:05.85定義が違うなんて見分け付かないから止めて欲しいが
メリケンにとっては日常的に重要な部分だから目に付くんかな
0423デフォルトの名無しさん
2013/01/10(木) 21:51:45.710424デフォルトの名無しさん
2013/01/10(木) 21:57:48.60そんなことないとおもうよ
英米人でもまちがえるだろう
0425デフォルトの名無しさん
2013/01/10(木) 22:43:51.76それの有無で別の変数になるような命名は避けるようにしてる
0426デフォルトの名無しさん
2013/01/10(木) 23:10:42.60間違えてもコンパイルエラーになる
0427デフォルトの名無しさん
2013/01/11(金) 01:44:47.350428デフォルトの名無しさん
2013/01/11(金) 01:52:21.44物理シミュレーションで伸び悩んでるので習得したいのですがどっちでやるべきでしょう
0429デフォルトの名無しさん
2013/01/11(金) 02:31:00.66ライブラリによると思うが、、Cを覚えたらFORTRANを覚えるのは苦にならないが、
FORTRANを覚えてもCを覚えるのに応用があまり利かないので、
Cを覚えるべきだと思う。
0430デフォルトの名無しさん
2013/01/11(金) 07:04:08.22ベクトル計算は得意
GPUやるならC系列だろうな
0431デフォルトの名無しさん
2013/01/11(金) 10:07:54.910432デフォルトの名無しさん
2013/01/11(金) 11:57:07.850433デフォルトの名無しさん
2013/01/11(金) 14:02:47.490434デフォルトの名無しさん
2013/01/11(金) 19:52:01.53今時ベクトル演算もできないPCとかあり得へん
0435デフォルトの名無しさん
2013/01/11(金) 19:53:38.720436デフォルトの名無しさん
2013/01/11(金) 20:11:28.500437デフォルトの名無しさん
2013/01/11(金) 20:12:16.709桁くらい精度が必要だったり
0438デフォルトの名無しさん
2013/01/12(土) 14:19:04.87スケールを工夫すればdoubleでもなんとかなるケースが多いけど
0439デフォルトの名無しさん
2013/01/12(土) 18:48:29.060440デフォルトの名無しさん
2013/01/13(日) 00:48:19.11それが使える環境だとC/C++でもlong doubleが128bitなのかな
0441デフォルトの名無しさん
2013/01/13(日) 01:31:52.31言語仕様的にfloat≦double≦long doubleなのがな……
しかも、http://www.wdic.org/w/TECH/long%20double読む限りでは128bitなlong doubleはレアなようだし
「自力で実装しろや」ってことだねこれは
0442デフォルトの名無しさん
2013/01/13(日) 01:33:44.530443デフォルトの名無しさん
2013/01/13(日) 02:49:43.57vectorは何のために残されているのでしょうか?
0444デフォルトの名無しさん
2013/01/13(日) 02:53:49.800445デフォルトの名無しさん
2013/01/13(日) 02:53:51.92配列を受け取るポインタ引数に渡せない
0446デフォルトの名無しさん
2013/01/13(日) 09:45:31.21最近のGCCは__float128で4倍精度使える
printfとかがまだ対応していないけど
0447デフォルトの名無しさん
2013/01/13(日) 12:21:52.07さらにインターネットで調べたらどうもJavaの概念らしいんですが
これって結局、各クラスが相互にアクセスできるような手段を
グローバル空間に用意することと同じようなものなんですよね?
0448デフォルトの名無しさん
2013/01/13(日) 12:42:40.030449デフォルトの名無しさん
2013/01/13(日) 12:48:53.490450デフォルトの名無しさん
2013/01/13(日) 12:59:17.83お互いの参照を持つだけ
0451デフォルトの名無しさん
2013/01/13(日) 13:16:11.40なんて本?おもしろそうだな
0452デフォルトの名無しさん
2013/01/13(日) 14:54:59.02class cBase {
public:
virtual ~cBase(){};
int func1(int num1, int num2) {
return num1+num2;
}
};
class cSub : public cBase {
public:
int func1(int num1, int num2) {
return cBase::func1(num1,num2)+num1;
}
};
以上のようなテストクラスを作ったのですがclass cSubのfunc1で使用している
cBase::func1という呼び出しは正しい記述なのでしょうか?
コンパイルや結果は正しく動いているようですが、好ましくないといった感じなのでしょうか
宜しくお願い致します
0453デフォルトの名無しさん
2013/01/13(日) 15:04:56.550454デフォルトの名無しさん
2013/01/13(日) 15:12:41.41ありがとうございました
0455デフォルトの名無しさん
2013/01/14(月) 03:16:11.13二次配列上?でとある数値計算を行なっているんだけど、一部の列がnanになってしまう
0456デフォルトの名無しさん
2013/01/14(月) 10:21:16.60よく見る記述方法だよ
0457デフォルトの名無しさん
2013/01/14(月) 11:09:44.08> 一部の列がnanになってしまう
普通にバグでしょ。
ちゃんと見直しなよ。
>>456
よく見ると言うほどには使わないと思う。
日常的に書いてるというなら、むしろ設計を疑ったほうが良いかも。
0458デフォルトの名無しさん
2013/01/14(月) 11:16:04.28まあ確かにあまり使わないけどw
入門書に普通に書いてあるレベルには見るという事
0459デフォルトの名無しさん
2013/01/14(月) 11:21:09.85それするくらいなら継承じゃなくて包含にして呼び出し順序を固定しろって話だったよな
0460デフォルトの名無しさん
2013/01/14(月) 11:57:54.64少なくとも、子の処理の前に実行すべきか、後に実行すべきか、
それとも途中で実行すべきかくらいは
あまりやりたくはない
0461デフォルトの名無しさん
2013/01/14(月) 12:03:55.56継承関係の上から下までよく知ってるor良くルールを決めてある
のどちらかが必要になるという欠点があるのであって
べつに親の仮装関数を呼び出すことに限った話ではない
0462デフォルトの名無しさん
2013/01/14(月) 16:55:23.820463デフォルトの名無しさん
2013/01/14(月) 20:44:30.850464デフォルトの名無しさん
2013/01/14(月) 20:50:20.980465デフォルトの名無しさん
2013/01/14(月) 20:51:43.21おk見なおしてみるとするよ〜
0466デフォルトの名無しさん
2013/01/15(火) 01:08:40.27template<typename T>class Hoge
{
public:
static T m_hoge;
Hoge(T hoge){m_hoge = hoge;}
};
template class Hoge<Fuga>;
template<> Fuga Hoge<Fuga>::m_hoge = (Fuga)0;
このようなテンプレートクラスの具体化を含むヘッダを複数のcppでインクルードして
ビルドしたところ、duplicate symbolで弾かれてしまいました
gcc4.2
各cppファイルではm_hogeにアクセスする必要があるのですが
どうすべきでしょうか
0467デフォルトの名無しさん
2013/01/15(火) 02:13:48.69template class Hoge<Fuga>;
template<> Fuga Hoge<Fuga>::m_hoge = (Fuga)0;
を書く
0468デフォルトの名無しさん
2013/01/15(火) 02:23:13.86hoge基地害はさっさと消えろ
0469デフォルトの名無しさん
2013/01/15(火) 02:29:16.570470デフォルトの名無しさん
2013/01/15(火) 03:38:47.960471デフォルトの名無しさん
2013/01/15(火) 04:08:12.23荒らしにレスするのやめてくれない?
荒らしにレスしてる時点でお前らも立派な荒らしだよ。
迷惑でしかないんだけど、親には他人に迷惑かけなさいって教育受けたのかね?
0472デフォルトの名無しさん
2013/01/15(火) 04:56:48.20こいつ本当に頭おかしいんじゃね
どうせ自覚ないだろ、基地害の典型
0473デフォルトの名無しさん
2013/01/15(火) 04:57:47.230474デフォルトの名無しさん
2013/01/15(火) 06:17:36.37template<typename T,typename D=void>class Hoge{〜};
template<typename D>Hoge<Fuga,D>::m_hoge=(Fuga)0;
0475デフォルトの名無しさん
2013/01/15(火) 08:45:31.98ありがとうございます。
cppファイルに記述してしまうとほかのcppファイルからアクセス出来ないと思ったのですが
できているようです。不思議
>>474
{~}は全部書くということでしょうか?Dで更にテンプレートっぽく見せるのが味噌なのでしょうか
0476デフォルトの名無しさん
2013/01/15(火) 10:31:32.470477デフォルトの名無しさん
2013/01/15(火) 10:34:02.35ほらHoge厨かかってこいよwwwwへいへいwwwwHogewwww
0478デフォルトの名無しさん
2013/01/15(火) 10:39:41.400479デフォルトの名無しさん
2013/01/15(火) 10:48:20.12Hoge ってのは目上の人間が、教える時に使う言葉だ。
将棋で玉を目上の対戦者に譲るのと同じ。
自分で使うなど、失礼な態度を見せておいて教えを乞うなどあってはならない。
質問者は頭を悩ませて例にあった名前を考えろ。それが礼儀だ。
0480デフォルトの名無しさん
2013/01/15(火) 12:47:59.160481デフォルトの名無しさん
2013/01/15(火) 13:49:57.89お前が友達だと勘違いしてる動機に何て思われてるか知ってる?
氏ねばいいのにって思われてるよ
それを言わないのはゴミに氏ねって言っただけで自殺教唆で逮捕されるのが嫌だからだよ
0482デフォルトの名無しさん
2013/01/15(火) 14:41:12.950483デフォルトの名無しさん
2013/01/15(火) 14:53:00.810484デフォルトの名無しさん
2013/01/15(火) 15:20:32.56今回もHoge厨にまともな奴はいないという説を強化する結果と相成りました
0485デフォルトの名無しさん
2013/01/15(火) 16:38:07.40荒らしって楽しいの?
0486デフォルトの名無しさん
2013/01/15(火) 16:49:13.260487デフォルトの名無しさん
2013/01/15(火) 16:52:03.04お前みたいな池沼にプログラミングは無理
何でfooじゃなくてhogeなの?
無意識なんだろうけど、無意識で手間を4/3にするとかありえないよ
そういう無意識はコーディングにも現れるよ
そういう池沼は9000行で済むはずコードが12000行になっても平気なんだよ
知識や経験が足りないタイプの馬鹿は努力でどうにかなるけど、
お前みたいに感覚から腐ってるタイプの馬鹿は救いようがない
0488デフォルトの名無しさん
2013/01/15(火) 16:52:28.10hoge?hogehogeho?
hogehhohogehhohogehogehoge?
0489デフォルトの名無しさん
2013/01/15(火) 17:16:23.19どうやらhoge厨が来たみたいだな
0490デフォルトの名無しさん
2013/01/15(火) 18:10:22.71いい加減ウザがられてるのに気付け。
お前リアルでもウザがられてるだろ。
0491デフォルトの名無しさん
2013/01/15(火) 19:34:35.78テンプレートっぽくというと言うか、一般的にはこんな感じ
ttp://www.google.co.jp/search?q=%EF%BC%A8%EF%BD%8F%EF%BD%87%EF%BD%85%E5%8E%A8%E3%82%A6%E3%82%B6%E3%81%84
0492デフォルトの名無しさん
2013/01/15(火) 20:38:54.480493デフォルトの名無しさん
2013/01/15(火) 20:48:54.99ks乙
0494デフォルトの名無しさん
2013/01/15(火) 21:34:18.29ほげぇ
頭悪そう
0495デフォルトの名無しさん
2013/01/15(火) 22:25:08.920496デフォルトの名無しさん
2013/01/15(火) 23:46:49.850497デフォルトの名無しさん
2013/01/16(水) 03:32:13.76何の疑問も持たずにHOGEとか使えるってのそれ精神異常だから。
0498デフォルトの名無しさん
2013/01/16(水) 07:31:47.570499デフォルトの名無しさん
2013/01/16(水) 09:27:02.630500デフォルトの名無しさん
2013/01/16(水) 09:52:51.23何でそんなにファビヨってるのかと思ってた
0501デフォルトの名無しさん
2013/01/16(水) 09:57:52.100502デフォルトの名無しさん
2013/01/16(水) 10:22:54.430503デフォルトの名無しさん
2013/01/16(水) 12:04:52.14httpとかpop3みたいな通信はもしかしてsocket.hには無いんですか?
どうすれば出来るようになるんでしょうか?
0504デフォルトの名無しさん
2013/01/16(水) 12:46:01.96ソケット使って自分で作るか、適当なライブラリ拾ってくる
0505デフォルトの名無しさん
2013/01/16(水) 13:51:31.030506デフォルトの名無しさん
2013/01/16(水) 13:56:28.40めちゃくちゃ大変じゃないですか
0507デフォルトの名無しさん
2013/01/16(水) 14:02:25.02エクセルとかビットマップみたいなファイルの読み書きはもしかしてstdio.hには無いんですか?
どうすれば出来るようになるんでしょうか?
0508デフォルトの名無しさん
2013/01/16(水) 14:07:41.28そのとおり
どのプログラムにもめちゃくちゃ大変な同じ処理を書くのが面倒なので
誰かがライブラリを作ってそれを利用する
0509デフォルトの名無しさん
2013/01/16(水) 14:11:59.97ファイル構造を調べて、それに沿って読み書き
あるいは、ライブラリを探すか変換ツールを探す
0510デフォルトの名無しさん
2013/01/16(水) 14:19:41.510511デフォルトの名無しさん
2013/01/16(水) 15:52:17.93C以来もへったくれも、>507はCのことだろ。
0512デフォルトの名無しさん
2013/01/16(水) 16:06:20.60は、標準ライブラリにあるでしょ
内部のフォーマットは言語に依存してないような
0513デフォルトの名無しさん
2013/01/16(水) 16:21:13.64そうだねスマン
そのポリシーはC++でも受け継がれてるからJavaとかC#からC++に入って来た奴が
戸惑うパターンをよく見掛けるもので
0514デフォルトの名無しさん
2013/01/16(水) 21:12:43.17HSPはそういう低能のための開発ツールなんだから
0515デフォルトの名無しさん
2013/01/16(水) 21:25:41.72HttpURLConnectionでできないことをやる場合はソケット作って
自分でプロトコル処理を書かないといけない。
0516デフォルトの名無しさん
2013/01/16(水) 21:53:32.150517デフォルトの名無しさん
2013/01/16(水) 21:58:24.520518デフォルトの名無しさん
2013/01/16(水) 22:00:50.860519デフォルトの名無しさん
2013/01/16(水) 22:42:53.95>>507
API……いやそれだとstdio.hじゃないな
ファイルフォーマットをググるとかして理解してから自作するor他ライブラリ利用でおk
>>512
ただのバイナリって話だからな……
バイト単位でデータを作れる必要はあるが、それだけだしな
0520デフォルトの名無しさん
2013/01/18(金) 14:57:10.50全く同じdllのインスタンスを複数並列に読み込ませたいと思い、
単純に loadLibary(L"path");を複数回繰り返してみたのですが、
参照カウントが増えるだけで全部同じインスタンスを指してしまっているようなのです
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200903/09030026.txt
おそらくここに書いてある通りだと思います。
dllの元は同じだが別のインスタンスを複数同時に保持するうまいやり方って何かないでしょうか??
0521520
2013/01/18(金) 16:00:05.11上記のURLには別のプロセスから呼べば別インスタンスに出来るとかいてあるのですが、
わざわざ別プロセスにしないでなんとかする方法がないものかと思っています。
loadLibrary以外の関数で別インスタンスでのdll読み込みができるものとかはないでしょうか
0522デフォルトの名無しさん
2013/01/18(金) 16:17:53.550523デフォルトの名無しさん
2013/01/18(金) 16:22:29.310524デフォルトの名無しさん
2013/01/18(金) 16:24:07.67絶対やりたいこととずれてる気がするわ
0525デフォルトの名無しさん
2013/01/18(金) 17:34:36.10それをやればいいんじゃね
0526デフォルトの名無しさん
2013/01/18(金) 17:36:54.520527デフォルトの名無しさん
2013/01/18(金) 17:40:01.330528デフォルトの名無しさん
2013/01/18(金) 18:07:23.86でも、何をしたいのか教えてくれれば、もっと穏当な解決方法を提示できると思う。
0529520
2013/01/18(金) 19:24:40.65>でも、何をしたいのか教えてくれれば、もっと穏当な解決方法を提示できると思う。
やりたいことは、
とあるGUIプログラムを複数立ちあげたいというものです。
dllを呼び出すホストアプリケーション側でloadLibrary(gui.dll)
をしたあとに、gui.dllのmainEntry()関数を呼ぶと、
自動的にGUI.dllのウィンドウがが立ち上がります。
これを複数回繰り返した時、繰り返した数分のウィンドウが立ち上がる動作を期待しているわけですが、
loadLibaryを使うと同じウィンドウが毎回アクティブになるだけという問題です。(複数ウィンドウにならない)
解決方法教えていただけると嬉しいです。
0530デフォルトの名無しさん
2013/01/18(金) 19:30:58.790531デフォルトの名無しさん
2013/01/19(土) 00:49:52.920532デフォルトの名無しさん
2013/01/19(土) 01:13:00.160533デフォルトの名無しさん
2013/01/20(日) 15:03:50.55シリアルポートと通信をするプログラムを作っているのですが、
最初から躓いています。。。
http://ideone.com/HGOYeo
シリアルポートを開くopen関数が帰ってこないのです。
出力は program startだけ表示されて、それ以降は表示されません。
terminalで
ls /dev/tty.*
で確認してみると、確かにシリアルポートでtty.usbmodemfa1311は存在しています。
何か原因は考えられますでしょうか?
0534デフォルトの名無しさん
2013/01/20(日) 16:28:34.08Arduino IDEのプログラムは終了させた状態で接続しています。
0535デフォルトの名無しさん
2013/01/20(日) 16:44:50.68ずっとopenのところでプログラムが止まっているのですが、
ArduinoのUSBを引っこ抜いたらopenから返って来ました。
ただ、もちろんopenの関数はエラーで返って来てます。。。
0536デフォルトの名無しさん
2013/01/20(日) 21:38:17.60Arduino初心者熱烈大歓迎質問スレ part8
http://uni.2ch.net/test/read.cgi/denki/1352019283/
0537デフォルトの名無しさん
2013/01/21(月) 13:48:22.41>シリアルポートを開くopen関数が帰ってこないのです。
>出力は program startだけ表示されて、それ以降は表示されません。
まさかと思うが、実はopen()からは帰ってきていて
printf()の出力がバッファリングされていて見えていないだけ、なんてことはないよな。
0538デフォルトの名無しさん
2013/01/21(月) 16:48:53.15使い方が正しいのなら、O_NONBLOCK フラグを付けて使うデバイスかもしれない
0539デフォルトの名無しさん
2013/01/21(月) 20:30:58.390540デフォルトの名無しさん
2013/01/21(月) 20:46:30.870541デフォルトの名無しさん
2013/01/21(月) 22:43:34.990542デフォルトの名無しさん
2013/01/21(月) 23:03:35.940543デフォルトの名無しさん
2013/01/22(火) 00:00:26.43たいていの処理系では 'a' と L'a' の値は同じだろうから事実上同じだけど、厳密に言えば異なる。
'a' は char型、L'a' は wchar_t型 で、char から wchar_t へは自動的に整数の昇格が行われるので
引数として渡せる。
0544デフォルトの名無しさん
2013/01/22(火) 01:10:13.12どういうこと?
>>543
そういう事なら違うよ
キャストだけでなく内部リテラルの扱いも考えなくちゃならんよ
exec-charsetのオプション一つで乙っちゃう
0545デフォルトの名無しさん
2013/01/22(火) 01:34:14.39void f(wchar_t c);
こういう関数を
f('a');
と呼び出してもエラーにならないってことだろう。
0546デフォルトの名無しさん
2013/01/22(火) 02:03:47.550547デフォルトの名無しさん
2013/01/22(火) 02:09:16.610548デフォルトの名無しさん
2013/01/22(火) 02:16:55.680549デフォルトの名無しさん
2013/01/22(火) 07:21:03.89オーバーロードじゃないじゃん
>>548
別にいいじゃん
むしろ>>545みたいな事にならないよう、オーバーロードしてあった方が安全に見える
0550デフォルトの名無しさん
2013/01/22(火) 07:54:46.130551デフォルトの名無しさん
2013/01/22(火) 12:37:57.31グローバル変数を使うと、ローカル変数とグローバル変数のキャッシュ載せ替えが頻発して、プログラムが遅くなる
↑これは正解?
0552デフォルトの名無しさん
2013/01/22(火) 12:42:54.840553デフォルトの名無しさん
2013/01/22(火) 12:45:59.61baka
0554デフォルトの名無しさん
2013/01/22(火) 12:46:19.870555デフォルトの名無しさん
2013/01/22(火) 13:12:26.64ぜんぜん大きいから安心しろ。
0556デフォルトの名無しさん
2013/01/22(火) 13:57:25.320557デフォルトの名無しさん
2013/01/22(火) 21:50:54.38ん?
0558デフォルトの名無しさん
2013/01/22(火) 21:53:47.44全ては実測だろ?
0559デフォルトの名無しさん
2013/01/23(水) 01:15:01.64主役は実験である
理論と現実が異なるならば現実を優先させるべきだ
cf. アキレスと亀
0560デフォルトの名無しさん
2013/01/23(水) 01:41:32.660561デフォルトの名無しさん
2013/01/23(水) 01:44:58.270562デフォルトの名無しさん
2013/01/23(水) 02:13:33.48効率の悪いコードはキャッシュ効率などではなくアルゴリズムまたは
実装方法そのものの効率が悪いだけだ。
0563デフォルトの名無しさん
2013/01/23(水) 02:15:31.39そう思うんならそうなんだろう
お前の中ではな
0564デフォルトの名無しさん
2013/01/23(水) 02:19:03.14じつれいはよ
0565デフォルトの名無しさん
2013/01/23(水) 02:24:23.68逝ってる系はどんだけキャシュメモリ積んでると思ってるんだろう
0566デフォルトの名無しさん
2013/01/23(水) 02:32:05.43極端に効果が低くなることが統計的にわかってきている。
だからプロセスルールが進んでキャッシュを大量に搭載可能でも
巨大なキャッシュにしないのは、コストに比べて効果が低いから。
>>565
コードキャッシュとデータキャッシュがある。最近のCPUではL1が
コードとデータ独立、L2以降が混在になっている。
0567デフォルトの名無しさん
2013/01/23(水) 03:05:10.66そんな効率無視の粗悪品しかかけないならままごとみたいなスクリプトでもいじってればいいのに
0568デフォルトの名無しさん
2013/01/23(水) 03:09:55.970569デフォルトの名無しさん
2013/01/23(水) 03:32:36.06技術もへったくれもないんだろ。
0570デフォルトの名無しさん
2013/01/23(水) 03:55:03.93これって1024バイトの物理的に連続したメモリ領域が確保されるって認識でOK?
char a[1024*1024];
メモリが1024*1024バイト以上空いてるのにこれが失敗するのは
連続した領域として確保できなかったからって認識でOK?
それでも確保したかったら
char *a;
a = malloc( 1024*1024 );
でOK?
0571デフォルトの名無しさん
2013/01/23(水) 04:04:44.320572デフォルトの名無しさん
2013/01/23(水) 04:21:37.35配列の宣言が失敗するっていうのはどういう状態を想定してるか
知らないけど、普通は無いよ。
アーキテクチャ上の制限で確保できない配列なら、ポインタとして
確保しようとしてもアクセスは保証されない可能性がある。
0573デフォルトの名無しさん
2013/01/23(水) 04:22:24.190574デフォルトの名無しさん
2013/01/23(水) 04:28:05.50スタックサイズの制限に引っかかてるだけでしょ。
0575デフォルトの名無しさん
2013/01/23(水) 04:40:50.40ローカル変数はスタックという領域に確保される。
スタックというのは、(簡単に言うと)プログラムの開始時に確保される領域で、
変数を宣言してもメモリ確保のコストがかからない代わりに容量の制限がある。
VC++だとデフォルトのスタックサイズが1MBだから、スタックから1MB確保することはできない。
malloc() はヒープという領域からメモリを確保する。
メモリ確保のコストがかかる代わりに、容量の制限が緩い。
基本的には(WindowsやLinux環境なら)連続したアドレス空間が空いていれば確保が可能。
1MBの連続したアドレス空間が空いてないということはまずないので、ほとんどの場合は成功する。
でもせっかくC++なんだから、malloc()なんか使わないで、解放し忘れる心配のない方法を使おう。
std::vector<char> a(1024);
std::unique_ptr<char> a(new char[1024 * 1024]);
0576デフォルトの名無しさん
2013/01/23(水) 07:19:11.47行列演算はそういう傾向あるかもしれないけど
今回の話とはあまり関係がないような
0577デフォルトの名無しさん
2013/01/23(水) 07:46:51.11最近は可能なのかな?
実行時間が10倍くらいになったりして、キャッシュの効果が如実にわかったものだけど。
0578デフォルトの名無しさん
2013/01/23(水) 12:00:35.600579デフォルトの名無しさん
2013/01/23(水) 12:43:57.00作りたいものがあって久々にVC++2005・・・警告やエラーメッセージが難解すぎる(汗)。
最近のVC++も同じく難解ですか?
0580デフォルトの名無しさん
2013/01/23(水) 12:57:24.90「難解な警告やエラーメッセージ」例の一つも出さずに質問とは・・・
0581デフォルトの名無しさん
2013/01/23(水) 13:16:14.90あるだろ
0582デフォルトの名無しさん
2013/01/23(水) 13:34:39.77あざっす
長年のもやもやがスッキリした
最初にドカッと宣言するとその関数に入った時点で強制終了するけどmallocなら強制終了しない
一応これで動いてるけど、大丈夫なのか?mallocにしたのがよかったのか?それとも偶然か?
といった感じで開発続けてた
vectorが便利だという噂はきいてたのでこれを機に試してみます
0583デフォルトの名無しさん
2013/01/23(水) 14:23:57.55行くべき地点が増えるにつれて計算時間が爆上がりしてお手上げ状態です
以前行った場所を記憶しときつつ繰り返し処理になるので配列と再帰を使ったが
もっと効率的な計算方法はないでしょうか?
0584デフォルトの名無しさん
2013/01/23(水) 15:11:39.94new[]に対してはstd::unique_ptr<T[]>にしないとだめだぞ
0585デフォルトの名無しさん
2013/01/23(水) 16:10:08.32NP問題に効率的な計算方法とか求めんなよ
近似解法ならともかく
0586デフォルトの名無しさん
2013/01/23(水) 19:16:47.67論理メモリ上のアドレスが近くても、物理メモリ上がどう配置されるかはわからないだろ。
0587デフォルトの名無しさん
2013/01/23(水) 19:55:30.73それ以外は保証されない(近いかもしれないし遠いかもしれない)のだから
確率的には近い方がいいだろ
0588デフォルトの名無しさん
2013/01/23(水) 20:21:28.260589デフォルトの名無しさん
2013/01/23(水) 20:25:46.090590デフォルトの名無しさん
2013/01/23(水) 20:40:41.810591デフォルトの名無しさん
2013/01/23(水) 20:59:54.54int i;
for(i=0;1;i++){
baka[i]=1;
}
BAKA
0592デフォルトの名無しさん
2013/01/23(水) 21:00:52.980593デフォルトの名無しさん
2013/01/23(水) 21:02:25.650594デフォルトの名無しさん
2013/01/23(水) 21:41:11.02下みたいなコードを書いたらコンパイルエラーが出ました。
struct tree {
struct node {
int key, value;
node *left, *right;
} *root;
int find(int key, node *n = root) { /* ... */ }
}
error: invalid use of nonstatic-data member 'tree::root'
今はこれを回避するために
int find(int key, node *n = root) { /* ... */ }
int find(int key) { return find(key, root); }
と、補助関数を作って対応しているのですが、
1つで済ます方法はないでしょうか。
よろしくお願いします。
0595デフォルトの名無しさん
2013/01/23(水) 21:44:39.38そもそも普通はnodeは外に公開しないので
自然と補助関数を作る実装になると思う
0596デフォルトの名無しさん
2013/01/23(水) 21:46:36.68分かってるとは思うけど
0597デフォルトの名無しさん
2013/01/23(水) 22:59:34.220598デフォルトの名無しさん
2013/01/23(水) 23:12:06.31条件次第というところ
0599デフォルトの名無しさん
2013/01/23(水) 23:35:06.46ありがとうございます。
ずらずらと find, insert, remove, ... と root から再起する関数の
補助関数が並ぶのが美しくなかったので聞いてみたのですが
確かに公開範囲を考えればそうするものですね。
0600デフォルトの名無しさん
2013/01/23(水) 23:53:29.67再帰用の引数はあまり公開したくないしね
inline関数にしておけば速度的にも気にすることは無いし
0601デフォルトの名無しさん
2013/01/24(木) 00:07:31.920602デフォルトの名無しさん
2013/01/24(木) 00:13:25.140603デフォルトの名無しさん
2013/01/24(木) 00:15:41.15fclose(); した後に、
#include <stdio.h>
の
int remove(const char *pathname);
で消せないの?
0604デフォルトの名無しさん
2013/01/24(木) 00:22:09.87FILE *p_file = new FILE();
fopen(省略);
fclose(省略);
delete p_file;
ってやったらいけないんですか?
deleteのところでエラーになります。
0605デフォルトの名無しさん
2013/01/24(木) 00:31:04.41端折り過ぎで何語かわからんなあ
0606デフォルトの名無しさん
2013/01/24(木) 00:50:40.33newもdeleteもするな
そんな糞コード捨てろ
0607デフォルトの名無しさん
2013/01/24(木) 01:06:49.000608デフォルトの名無しさん
2013/01/24(木) 01:22:31.110609デフォルトの名無しさん
2013/01/24(木) 01:23:41.17fp=fopen("hoge.txt","r");
/*なんかの処理*/
fclose(fp);
0610デフォルトの名無しさん
2013/01/24(木) 01:27:16.06この時点でコンパイルエラーになるはず。
0611デフォルトの名無しさん
2013/01/24(木) 01:41:19.59int main() { FILE *fp = new FILE(); delete fp; return 0; }
これを
g++ -Wall
で何も警告もなくビルド出来たし、実行しても何も問題なかったよ。
0612デフォルトの名無しさん
2013/01/24(木) 01:47:31.910613デフォルトの名無しさん
2013/01/24(木) 02:02:27.30それどこで、教えてもらったの?
0615デフォルトの名無しさん
2013/01/24(木) 02:10:04.67使い方が...
0616デフォルトの名無しさん
2013/01/24(木) 02:14:27.00CかC++をちゃんと勉強したなら>>604みたいなの書くわけないし、
勉強している途中だったら>>604みたいなコードにお目にかかることもないだろ?
あるとしたら、ちゃんと勉強しなかった者同士で作っているプログラムにそういうコードがあったか、
釣りだ。
0617デフォルトの名無しさん
2013/01/24(木) 05:42:03.850618デフォルトの名無しさん
2013/01/24(木) 07:21:22.23こんなのエスパーできるかっ!!
fopenのヘルプを見ろ!
0619デフォルトの名無しさん
2013/01/24(木) 07:38:15.92VCだとFILEが不完全型だったような気がする
不確かな記憶だが
0620デフォルトの名無しさん
2013/01/24(木) 07:39:01.32fstream::open|constructor/fstream::close|destructorがnew/delete相当
CとC++で資源操作取得の混在はほぼ許されるけど混用は許されないんだよ
0621デフォルトの名無しさん
2013/01/24(木) 09:26:51.400622デフォルトの名無しさん
2013/01/24(木) 10:52:18.35エスパーすると、fopen/fcloseはC/C++両方にある機能、fstreamはC++にしかない機能って言いたいんだと思うよ。
ここでそれを言う意味はわからないけど。
0623デフォルトの名無しさん
2013/01/24(木) 11:44:25.75int fclose(FILE *fp);
0624デフォルトの名無しさん
2013/01/24(木) 11:53:36.34読み込み専用に開いてアクセス権を独占とか
書き込み専用に開いて後続の読み込みアクセスは許可とか
0625デフォルトの名無しさん
2013/01/24(木) 11:56:29.900626デフォルトの名無しさん
2013/01/24(木) 16:59:41.55自分以外のスレッドの存在は想定されてないから排他制御の仕組みなんか標準に無い
0627デフォルトの名無しさん
2013/01/24(木) 17:11:49.56マジで寒くて凍え死にそうです。
今から夜になればさらに気温が下がり、ほんとやばいです。
そこでC/C++が得意な皆さんに質問です。
パソコンはクアッドコアのCPUと670Wの電源を積んでいるので、
これを全力で動かして部屋を暖めたいと思います。
どんなコードなら全力で動かすことができるでしょうか。
よろしくお願いします。
0628デフォルトの名無しさん
2013/01/24(木) 17:12:52.440629デフォルトの名無しさん
2013/01/24(木) 17:51:16.28distributed.net
0631デフォルトの名無しさん
2013/01/24(木) 22:15:37.85指定バージョンのboostをダウンロードして、./bootstrap や./bjam 、./bjam installという手順でビルド、インストールまで成功しましたが、リンクでエラーが起こります。
ライブラリのパスの設定がうまくいってないのかな?やり方教えてください。
ちなみに見つからないのは、
-lboostprogramoption_mtみたいなのや、-lboostregex_mtです。
インストール先は、libboost〜on/ex.aで微妙に違うけど問題ない?
0632デフォルトの名無しさん
2013/01/24(木) 22:18:10.19> 「Devel」カテゴリの「boost」と「boost-dev」を選択してください。
0633デフォルトの名無しさん
2013/01/24(木) 22:22:25.83なお、boost のビルドの仕方によっては -mt だけじゃなくて -lboost_xxxxx-mt-gcc45 みたいにする必要があるかもしれないのでライブラリのファイル名を確認してくれ。
0634デフォルトの名無しさん
2013/01/24(木) 23:50:08.22であってますか?
0635デフォルトの名無しさん
2013/01/24(木) 23:59:10.88巨大バッファならありだが
0636デフォルトの名無しさん
2013/01/24(木) 23:59:38.72deleteしないと、メモリリークする
0637デフォルトの名無しさん
2013/01/25(金) 00:04:42.480638デフォルトの名無しさん
2013/01/25(金) 00:27:34.29newしたブロックとそれを受ける変数は直接関係ねえ。
deleteせずにreturnで返すなんてのはごく普通にやるだろ。
0639デフォルトの名無しさん
2013/01/25(金) 00:29:15.780640631
2013/01/25(金) 00:31:18.65includeで良いもの、ビルド必須があるらしく、programoptionなどは、
ビルドしないといけないとネットにあった。
インストーラから入れたものでもOKですか?試してみたいと思います。
>>633
makefileにあるg++コマンドのオプションのことでしょうか。
makefileいじる必要ないと思っていたのですが、いじることも考えなけ
ればいけないでしょうか。オプションは、-lboost_programoption-mtなどあり
実際(usr/local/include/lib?うるおぼえ)は、libboostprogramoption.a
というのありました。意味不明かもですが、心当たりあったらお願いします。
0641デフォルトの名無しさん
2013/01/25(金) 00:40:27.36ローカル変数にnewして、他に渡さず、関数内でdeleteするのって
巨大バッファを確保する時くらいしか意味が無い
しかもそれすら普通vector使うし
newはreturnしたりメンバ変数に保持したりしてなんぼやで
0642デフォルトの名無しさん
2013/01/25(金) 00:43:27.48お作法みたいなのはよー知らんのよね
0643デフォルトの名無しさん
2013/01/25(金) 04:17:36.75int *cp_0 , *cp_1 , *cp_2;
と宣言しているのを、一つにまとめたいのです
cp_0〜cp_2についてはmallocで必要なぶん領域を確保しますが、最初は確保するサイズも決まってません
int cp[3];
みたいな感じでまとめてしまいたいのです
また、この例ではポインタを3つ固定で宣言していますが、可変にしたいです
int cp;
みたいに宣言して、可変な配列のアドレスの配列にしたいです
例えばcp[2]が3番目の配列の先頭のアドレスを指すのが理想です
0644デフォルトの名無しさん
2013/01/25(金) 04:19:00.740645デフォルトの名無しさん
2013/01/25(金) 04:20:42.43int** cp = new int*[3]; ね
0647デフォルトの名無しさん
2013/01/25(金) 05:25:18.51ttp://ideone.com/D4sWTm
char* だけど、こんな感じで・・
0648デフォルトの名無しさん
2013/01/25(金) 06:22:55.29他の人も言ってるポインタへのポインタを覚えるよろし。
基礎はぐぐって勉強して、最終的にはこれのいずれか→http://d.hatena.ne.jp/tondol/20090713/1247426321
>キモくなる
>マジキチな
>若干キモい
これ日本語?意味がわからない
0650デフォルトの名無しさん
2013/01/25(金) 07:26:28.08typedef int* intp_t; と置いて考えてポインタ以外の型と使い方を比べれば
きっと一体何を悩んでいたのだろうと思うこと請け合い
0651デフォルトの名無しさん
2013/01/25(金) 07:39:58.56そこんとこがCとC++で仕様が異なるが
二次元配列を動的確保する分には問題は無いな
0652デフォルトの名無しさん
2013/01/25(金) 07:53:42.990653デフォルトの名無しさん
2013/01/25(金) 08:06:54.73配列 new するぐらいなら std::vector 使えよ。
std::vectpr<int*> cp(3);
0654デフォルトの名無しさん
2013/01/25(金) 08:34:26.840655デフォルトの名無しさん
2013/01/25(金) 10:58:14.50お前がそう思うのならそうなんだろうよ。お前の中ではな。
つーか、「各行の要素数が違う」のならその要素数を保持する配列も必要になるのだが、
それを考慮していない時点で論外。
0656デフォルトの名無しさん
2013/01/25(金) 12:52:05.010657デフォルトの名無しさん
2013/01/25(金) 15:50:28.25C++を勉強する場合、Cの知識は役に立ちますか?
0658デフォルトの名無しさん
2013/01/25(金) 16:57:35.47後者です。
はい。
0659デフォルトの名無しさん
2013/01/25(金) 21:03:07.92(vectorのvectorじゃ)いかんのか?
0660デフォルトの名無しさん
2013/01/25(金) 21:44:46.20vector<int*>で各行のアドレスを保持すれば
メモリの確保が2回で済んで良い
0661デフォルトの名無しさん
2013/01/25(金) 23:33:29.33>>660 メモリの確保を減らさないといけない理由が特になければそんな面倒なことはしなくてよい。
0662デフォルトの名無しさん
2013/01/26(土) 00:23:45.90インデックスを自分で作ればいいんだよ
行列演算だと常套手段だ
0663デフォルトの名無しさん
2013/01/26(土) 01:59:24.27long *index;
//3つの配列を作成
//1つ当たりの配列の長さは、12、8、16byte
data = (long*)malloc( sizeof( long ) * ( 12 + 8 + 16 ) );
index = (long*)malloc( sizeof( long ) * 3 );
&index[0] = &data[0];
&index[1] = &data[12];
&index[2] = &data[12+8];
0664デフォルトの名無しさん
2013/01/26(土) 02:06:21.20long *data;
long **index;
data = (long *) malloc(sizeof(long) * (12 + 8 + 16));
index = (long **) malloc(sizeof(long *) * 3);
index[0] = &data[0];
index[1] = &data[12];
index[2] = &data[12 + 8];
0665デフォルトの名無しさん
2013/01/26(土) 02:13:11.3148
32
64
バイトだろ
0666デフォルトの名無しさん
2013/01/26(土) 03:07:49.13見せられたら理解できるけど
自力でそれを書けない
一度見てしまったから全く同一の状況なら自力で書けるけど
ちょっと違う状況だと書ける気がしない
どうしたもんか
0667デフォルトの名無しさん
2013/01/26(土) 03:18:27.40いきなりコーディングしない。
紙にメモリイメージを描いて、理解できたらコーディング。
0668デフォルトの名無しさん
2013/01/26(土) 03:22:45.28typedef long* pLong;
typedef pLong* ppLong;
参照とかconstとか混乱しなくてすむ。
0669デフォルトの名無しさん
2013/01/26(土) 09:01:08.65long *data;
int *index;
data = malloc(sizeof(long) * (12 + 8 + 16));
index = malloc(sizeof(int) * 3);
index[0] = 0;
index[1] = 12;
index[2] = 12 + 8;
data[index[0] + i] = x;
data[index[1] + j] = y;
data[index[2] + k] = z;
とやってる事は大して変わらない
怖がり過ぎてるだけ
0670デフォルトの名無しさん
2013/01/26(土) 09:17:43.84std::vector<std::vector<int> > v(3);
v[0].resize(12);
v[1].resize(8);
v[2].resize(16);
メモリとかにきつい要件が無いならこれでいい。
自身の無いやつが malloc() なんかに手を出すべきじゃない。
0671デフォルトの名無しさん
2013/01/26(土) 13:48:17.16strcpy(a, 'hoge');
あらかじめ、こんな風に文字列が入っているケツに書式文字列を追加したいです。
char b;
char c[10];
sprintf(c, "%02X", b);
strcat(a, c);
こんな風が一般的だろうと思いますけど、代わりに
char b;
sprintf(&a[strlen(a)], "%02X", b);
ってやっちゃってもいいんでしょうか
0672デフォルトの名無しさん
2013/01/26(土) 13:52:12.33ウゼえ消えろ
0673デフォルトの名無しさん
2013/01/26(土) 13:54:01.10やればいいんじゃない?
hogeとか使ってるようなゴミの書くコードなんだからどうでもいいだろ。
0674デフォルトの名無しさん
2013/01/26(土) 13:58:03.07ウジ虫は回線切れ
0675671
2013/01/26(土) 14:00:07.14ほんとここはいい釣り堀だなwwwwww
本気で質問してると思った?wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0676デフォルトの名無しさん
2013/01/26(土) 14:06:11.79できるけど、その前にstrcpyとstrcatとsprintfは
セキュリティホールになりかねない危険な関数なので使い方には気をつけろ
どんな条件でも文字列が格納可能なバッファサイズが残っている事はチェックしろよ
0677デフォルトの名無しさん
2013/01/26(土) 14:13:01.730678デフォルトの名無しさん
2013/01/26(土) 14:14:52.04HOGEHOGEwwwwwwwwwHogewwwwwwwwwwwHohhohおHOGEEえええええええええええwwwwwwww
0679671
2013/01/26(土) 14:21:37.08俺は >>675 じゃないぜ
strcpy(a, 'hoge');
でコンパイルエラーでますた
strcpy(a, "hoge");
でっと
>>676
ありがと
外部から引数で可変文字列をもらうわけじゃないから
特にサイズチェック不要ですよね?
0680デフォルトの名無しさん
2013/01/26(土) 14:29:20.79チェックは不要だよ
お前がそもそも世の中に不要
不要なゴミの書いたゴミコードに問題があっても誰も困らない
0681デフォルトの名無しさん
2013/01/26(土) 14:30:36.130682デフォルトの名無しさん
2013/01/26(土) 14:33:53.47分かったから他スレでやってくれ
荒らす理由は何か知らないけどとにかく迷惑
0683デフォルトの名無しさん
2013/01/26(土) 14:38:32.73チェックというかこういう処理が必要。
ttp://www.google.co.jp/search?q=%E3%83%90%E3%83%BC%E3%82%AB%EF%BD%97
0684デフォルトの名無しさん
2013/01/26(土) 14:39:14.29釣り宣言とか無視しろよ。子供じゃあるまいし
0685デフォルトの名無しさん
2013/01/26(土) 14:42:08.55>ここIDでないのかよ
自分の不手際をシステムのせいにする典型的な知恵遅れ入りましたー
他人のせいにする腐った根性してたらそりゃプログラミングも上達しないわな
0686デフォルトの名無しさん
2013/01/26(土) 14:44:05.53荒したい人だけレスして。
0687デフォルトの名無しさん
2013/01/26(土) 14:51:43.39荒したい人だけレスして。
0688デフォルトの名無しさん
2013/01/26(土) 14:53:04.780689デフォルトの名無しさん
2013/01/26(土) 14:57:28.130690hoge厨撲滅委員会
2013/01/26(土) 16:37:49.870691デフォルトの名無しさん
2013/01/26(土) 16:57:06.22韓国のエンジニアって自分の名前とかその略称をメタ変数に使うことが多くて、hogeもその一種。
キム・ホンギョン(うろ覚えだから間違ってるかも)とかいう韓国のエンジニアが自分の名前の略称hongeを使ったのが始まり。
当然他の人は自分の名前を使ってたわけだからhonge以外にもたくさんあった。
ではなぜhogeだけが日本に入ってきたのか?
日本のエンジニアと韓国のエンジニアの交流はほとんどなく、たまたま交流会を開催したときに韓国のエンジニアチームの中にキム・ホンギョンが混ざっていた。
そして資料の一部に載っていたコードがキム・ホンギョンのものだったから、hongeという文字が含まれていた。
日本のエンジニアは意味が分からなかったから、hongeとは何だと質問したら、メタ変数だと返答が帰ってきた。
当時は今みたいに反韓の風潮はなかったから日本のエンジニアは日本へ帰ってきて使ってみたところ、それが少しずつ広まった。
最初はhongeだったがいつしか省略されて今のような状態になった。
0692413
2013/01/26(土) 17:58:24.96全部拝見させていただいてますが、結局よくわからない・・
自分でもう少し調べようとしているところです..
0693デフォルトの名無しさん
2013/01/26(土) 18:37:22.610694デフォルトの名無しさん
2013/01/26(土) 19:18:11.120695hoge厨撲滅協議会
2013/01/26(土) 19:27:51.290696デフォルトの名無しさん
2013/01/26(土) 19:48:30.87このスレの結論としては
可変長配列ではないかという推測
void Resize(Events* ev, int num)
{
Free(ev);
events[0] = new Event[num];
events[1] = events[0] + num;
numEvents = num;
}
のような形で確保して、
ev.events[0] は begin、
ev.events[1] は end を表す
例えば
std::sort(ev.events[0], ev.events[1]);
のように使える
あくまで推測だけどね
0697日本基地害hoge房防止協会
2013/01/26(土) 19:53:51.86hogeというワードの利用はあなたの育ちの悪さを疑われることになります。
例えば、相手の言っていることが気にいらない場合、
育ちの良い人は「何をおっしゃってるのか理解しかねますな」と言いますが、
育ちの悪い人は「あんだとテメーバーローちょーしこいてんじゃねーぞボケが」と言います。
hogeを使っていると間違いなく後者に見られるでしょう。
0698デフォルトの名無しさん
2013/01/26(土) 19:58:52.40void Resize(Events* ev, int num)
{
Free(ev);
ev->events[0] = new Event[num];
ev->events[1] = ev->events[0] + num;
ev->numEvents = num;
}
で、
Events ev = {};
Resize(&ev);
のように確保して
std::sort(ev.events[0], ev.events[1]);
のようにソートする
0699デフォルトの名無しさん
2013/01/26(土) 21:32:04.59hogeはアメリカ生まれだよぉぉ
0700デフォルトの名無しさん
2013/01/26(土) 22:00:51.44それは根拠ないだろ。
1995年ごろに、ニフティのパソコン通信でhoge, hugaみたことある。
0701デフォルトの名無しさん
2013/01/26(土) 22:38:45.07「hoge」の起源を求めて
ttp://togetter.com/li/47113
0702デフォルトの名無しさん
2013/01/26(土) 22:43:46.93そもそも英語圏は foo, bar だろ。
>>700
huga って…
まあ、にちゃんのヨタ話よりまだこのページの方が信用できる。
http://kmaebashi.com/programmer/hoge.html
0703デフォルトの名無しさん
2013/01/26(土) 23:17:29.56マジでどんな精神構造してたらfooとかbarみたいなアルファベットの並びが出てくるんだろうな
絶対にまともじゃない
音の響きもアホっぽいし使うと恥ずかしい
それでもhogeより100倍マシだけど
0704デフォルトの名無しさん
2013/01/27(日) 00:12:39.92て言うか、書き換えないといけないんだから、あえて違和感のある名前じゃないと困るんだが…
0705デフォルトの名無しさん
2013/01/27(日) 00:39:12.370706デフォルトの名無しさん
2013/01/27(日) 00:53:55.240707デフォルトの名無しさん
2013/01/27(日) 02:09:46.34それでいいんじゃね、まあ >>703 と同じこと言われるだけだろうけど (w
0708国際hoge活動禁止機構日本支部
2013/01/27(日) 03:56:33.82hogeはfooよりも文字数が33%多いため効率が悪く、これが広まることによりIT業界全体の効率が低下することが懸念されています
試算によると、IT業界の約50%の人間がhogeに汚染された場合、業界全体の合計作業時間が約1.166666倍となることが明らかになっています
IT業界全体への悪影響が避けられないばかりか、関連する他の業界への影響も深刻なものとなります
健全な社会の発展のためにhogeは使わないようにしましょう
0709デフォルトの名無しさん
2013/01/27(日) 07:52:23.770710デフォルトの名無しさん
2013/01/27(日) 07:57:10.380711デフォルトの名無しさん
2013/01/27(日) 12:27:18.590712デフォルトの名無しさん
2013/01/27(日) 12:52:26.11f は、左手人差し指のホームポジションで移動不要、o も右手薬指で
少し移動するだけの上に、二回目の o は移動不要。
対して、hoge は全て移動が必要なので、普通に考えたら、hoge の方
が入力が遅いと思うぞ。
0713デフォルトの名無しさん
2013/01/27(日) 13:01:04.350714デフォルトの名無しさん
2013/01/27(日) 13:17:31.040715デフォルトの名無しさん
2013/01/27(日) 13:20:31.920718デフォルトの名無しさん
2013/01/27(日) 13:26:07.51hogeは右手と左手をバランス良く使うので入力早い
0719デフォルトの名無しさん
2013/01/27(日) 13:30:06.120720デフォルトの名無しさん
2013/01/27(日) 13:34:00.78>hogeは右手と左手をバランス良く使うので入力早い
右右左左だろ。
hgoe の方が速いかも。
0721デフォルトの名無しさん
2013/01/27(日) 13:47:20.39いや、やってみると分かるけど、
交互より2つずつのが遥かに速い
0722デフォルトの名無しさん
2013/01/27(日) 13:56:34.84って思ったが、b と r が両方人差し指だから、打ちにくいな。
0723デフォルトの名無しさん
2013/01/27(日) 13:57:08.720725デフォルトの名無しさん
2013/01/27(日) 14:02:56.250726デフォルトの名無しさん
2013/01/27(日) 14:13:20.48片手3つより片手2つを交互の方が打ちやすい
0727デフォルトの名無しさん
2013/01/27(日) 14:20:44.10さすがにそれは人によるかと。
0728デフォルトの名無しさん
2013/01/27(日) 14:26:15.14つーか1文字が一番速いだろ
わざわざホゲとか恥ずかしいものを打ち込む必要はない
0729デフォルトの名無しさん
2013/01/27(日) 14:31:40.64全て違う指だというのも重要
hogeの配置は優秀
>>728
短すぎると目視検索し辛い
3文字以上は必要だな
hogとかならいける
0730デフォルトの名無しさん
2013/01/27(日) 14:42:10.19hogeとか恥ずかしいだけだし
ほげぇ
ほげぇ
頭悪そう
0731デフォルトの名無しさん
2013/01/27(日) 14:47:09.210732デフォルトの名無しさん
2013/01/27(日) 14:54:44.66人としての尊厳のかけらもないとかね
服着ると暑いとかめんどくさいとか言ってパンイチで電車に乗ってるキチガイが昔いたけどあれと同じ
0733デフォルトの名無しさん
2013/01/27(日) 14:59:21.840734デフォルトの名無しさん
2013/01/27(日) 15:04:04.10そのパンツにhogeとか書いとけばいいんじゃね
0735デフォルトの名無しさん
2013/01/27(日) 15:10:59.06それで効率が良くなるならまだしも、士気を下げる結果になって効率を下げることが多い。
0736デフォルトの名無しさん
2013/01/27(日) 15:16:57.681行目のサイズは2^0 = 1、2行目のサイズは2^1 = 2、3行目のサイズは2^2=4・・・最後は11行目で、サイズは2^10というような配列を作りたい場合、
double **hoge;
hoge = (int**)malloc(sizeof(int*)*(cDEPTH+1));
hoge[0] = (int*)malloc(sizeof(int)*maxgroup*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = GP_NUM0[i-1]+pow2n(i-1);
}
というようなコードでいいのでしょうか?
どこかでメモリエラーが出ているらしく、途方にくれています・・・
0737デフォルトの名無しさん
2013/01/27(日) 15:17:38.73C++じゃいかんのか?
C++でvector使えば捗るで
0738デフォルトの名無しさん
2013/01/27(日) 15:18:45.48hogeとか使ってるからだろ
失せろゴミ
0739デフォルトの名無しさん
2013/01/27(日) 15:19:42.08doubleなのになんでintなんだ
0740デフォルトの名無しさん
2013/01/27(日) 15:20:43.56hoge使って違和感感じない歪んだ感覚が原因じゃないの?
普通の感覚してたら一発で書けるけど。
0741デフォルトの名無しさん
2013/01/27(日) 15:22:03.33お前みたいなゴミhoge厨が途方にくれたところで誰も困らないからさっさと回線切ってね^^
0742736
2013/01/27(日) 15:23:09.59double **hoge;
hoge = (int**)malloc(sizeof(int*)*(line+1));
hoge[0] = (int*)malloc(sizeof(int)*1024*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = hoge[i-1]+pow2n(i-1);
}
よろしくお願いします。
作りたいのは
1x1,1x2,1x4・・・1x1024のジョグ配列のようなものです。
0743デフォルトの名無しさん
2013/01/27(日) 15:24:27.720744736
2013/01/27(日) 15:25:56.84返信ありがとうございます。
またコードを間違って張っていました。実際のものは型を間違ってはいません。
double **hoge;
hoge = (double**)malloc(sizeof(double*)*(line+1));
hoge[0] = (double*)malloc(sizeof(int)*1024*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = hoge[i-1]+pow2n(i-1);
}
かなりのコードをすでにCで書いてしまっているのと、C++は知らないもので・・・
あまり時間がないので今から習得している余裕が無いです。
0745デフォルトの名無しさん
2013/01/27(日) 15:26:28.34回答してる奴も煽ってる奴も
荒らしの相手をしてる時点で荒らしだから
0746デフォルトの名無しさん
2013/01/27(日) 15:26:39.59卒論か?
それなら自分でやれと言いたいが
0748デフォルトの名無しさん
2013/01/27(日) 15:30:10.29double **hoge;
int i, alloc_size = 1, cDEPTH = 10;
hoge = (double **) malloc(sizeof(double *) * cDEPTH);
for(i = 0; i < cDEPTH; i++) {
hoge[i] = (double *) malloc(sizeof(double) * alloc_size);
alloc_size *= 2;
}
で良いんじゃないの?
0749デフォルトの名無しさん
2013/01/27(日) 15:33:04.02場合によってはメモリの連続性が必要な場合もあるかもしれないし
0751デフォルトの名無しさん
2013/01/27(日) 15:36:02.032^10という上限を意味してんだから
0752デフォルトの名無しさん
2013/01/27(日) 15:36:59.34投稿前にチェックできないほど知能の低いゴミはレスするな
0753デフォルトの名無しさん
2013/01/27(日) 15:38:19.39hoge使ってるのが間違い
それにお前の存在そのものが間違い
0754デフォルトの名無しさん
2013/01/27(日) 15:39:28.820755736
2013/01/27(日) 15:39:29.68我ながらひどい
>>748
ありがとうございます。ただ>>748さんの仰っているとおり、メモリを一度に取得したいです。
人に見せてわかりやすいコードってのはこういうものなんですね、勉強になります。
0756デフォルトの名無しさん
2013/01/27(日) 15:45:37.31まだintじゃねえか
0757デフォルトの名無しさん
2013/01/27(日) 15:46:56.630758デフォルトの名無しさん
2013/01/27(日) 15:47:08.06なんで>>736からそう変わるのか。
小出しされてしかも間違ったものだとな・・
0759デフォルトの名無しさん
2013/01/27(日) 15:47:35.750760デフォルトの名無しさん
2013/01/27(日) 15:48:17.29まだ気づかない?
煽るためだけに質問してることに。
0761デフォルトの名無しさん
2013/01/27(日) 15:48:25.40変数の内容をダンプしろダンプ
0762デフォルトの名無しさん
2013/01/27(日) 15:54:00.36ぶはあああああああああああああああああああああああああああああwwwwwバレたwwwwwwwwwwwwwwwwwwww
そうですwwwwwwwwwだって回答者のふりしてたらゴミ質問者がまた書き込むから、そうしたらアンチhogeがまた叩いて荒れるからなwwwwwwwwwwwwwwwwwww
回答者のレスがつかないと質問者は叩かれてどっかいってしまって長く続かないもんwwwwwwwwwwwwwwwwww
自分では手を下さなくてもスレが荒れるからいい手段だと思ったのにwwwwwwwwwwwwwwwwwwwwwwwwwばwwwれwwwwたwwwwwwww
そりゃそうだよなwwww荒らす目的がなかったらhoge厨に回答なんかしないもんなwwwwwwwwwwwwwwwやっぱ不自然だったかwwwwwwwwwwwwwwwwwwwwwwww
0763736
2013/01/27(日) 15:54:08.76質問を取り下げます。
0764デフォルトの名無しさん
2013/01/27(日) 15:55:39.56まともな回答者はhogeをNGに入れてるし。
0765デフォルトの名無しさん
2013/01/27(日) 15:56:43.80卒論は本気なの?
本気なんだったら
卒業できないことをお祈りしていますw
0766デフォルトの名無しさん
2013/01/27(日) 16:02:41.180767デフォルトの名無しさん
2013/01/27(日) 16:14:04.170768デフォルトの名無しさん
2013/01/27(日) 16:28:36.400769デフォルトの名無しさん
2013/01/27(日) 16:50:12.54常駐してるんだねこの板。
0770デフォルトの名無しさん
2013/01/27(日) 17:03:20.410771デフォルトの名無しさん
2013/01/27(日) 17:08:40.21それが大規模開発になると300万文字と400万文字になる。
スピードでいえばキーボードは左右交互に売ったほうががががががががとか言いながら無駄に長いコードを書く。
100万文字の差は無視できないのにね。
アルゴリズムや実行時の効率上の関係で長くなるならまだしも、それ関係なく100万文字長くなるとかもうね。
普段から「くだらないこと」と決めつけてる思考停止は雇わないほうが吉。
こういう根本的に腐ってる人間は文字数以外にも現れるから、
300時間も400時間も同じだと言って仕事チンタラ仕事をする。
0772デフォルトの名無しさん
2013/01/27(日) 17:13:22.82>3文字でも4文字でもいいってことは30文字でも40文字でもいいと言ってるのと同じ。
この批判は、まあわかるが…
>それが大規模開発になると300万文字と400万文字になる。
これは、馬鹿だろ。
大規模だと、それ以外の部分も多くなるし、そもそも1人で開発するわけじゃないし。
0773デフォルトの名無しさん
2013/01/27(日) 17:26:41.25そんなことに思考を割くこと自体が時間と労力の無駄
一番貴重なのは人的にリソースだからな
0774デフォルトの名無しさん
2013/01/27(日) 17:33:04.54こいつのプログラムは識別子並べるだけで構成されてるらしい。
0775デフォルトの名無しさん
2013/01/27(日) 17:37:03.70時代に逆行してんな
0776デフォルトの名無しさん
2013/01/27(日) 17:37:49.43アホ発見
0777デフォルトの名無しさん
2013/01/27(日) 17:43:23.32そんな事より見て意味が分かる方が重要
0778デフォルトの名無しさん
2013/01/27(日) 17:46:41.85意味が分からないだけならまだしも馬鹿っぽい
0779デフォルトの名無しさん
2013/01/27(日) 17:50:09.05bool kore_ha_nanrakano_jyoutai_no_hitei_wo_arawasu_huragu_desu;
bool kore_ha_nanrakano_jyoutai_no_koutei_wo_arawasu_huragu_desu;
そうやって似たような名前の変数補完ミスるんだよな
0780デフォルトの名無しさん
2013/01/27(日) 17:54:50.01アホか
0781デフォルトの名無しさん
2013/01/27(日) 18:04:44.620782デフォルトの名無しさん
2013/01/27(日) 18:04:53.900783デフォルトの名無しさん
2013/01/27(日) 18:10:59.460784デフォルトの名無しさん
2013/01/27(日) 18:44:43.42std::wstringstream wss;
wss << L"year: " << 2013; ←ここでエラー
なぜなんでしょうか?
MSVC Win32では正常にとおります
x64でビルドすると数字がくっつきません
0785デフォルトの名無しさん
2013/01/27(日) 18:45:06.240786デフォルトの名無しさん
2013/01/27(日) 19:01:53.22環境がないから分からんが、
ロケールに問題があるのかも?
0787デフォルトの名無しさん
2013/01/27(日) 19:05:55.21お前だって外出たら黒のパーカー着た奴が全員ゲイでしかも全員お前に襲いかかったら
黒のパーカーがトラウマになるよ
そういう背景を考慮せずに笑うのは、まともに精神が発達してるという前提なら小学生低学年までなんだけどな
0788デフォルトの名無しさん
2013/01/27(日) 19:11:50.19そんな同じ意味の変数を複数作る奴はバカだと思う。
0789デフォルトの名無しさん
2013/01/27(日) 19:58:04.87#define DEPTH 5
#define AMOUNT_ARRAY (1<<(DEPTH-1))
#define AMOUNT_X(a) (1<<((a)-1))
#define TOP_INDEX(a) ((1<<((a)-1))-1)
#define IS_INDEX(a,b) AMOUNT(((a)-1))+(b))
#define L_INDEX(a,b) (IS_INDEX((a)+1,(b)*2)
#define R_INDEX(a,b) (L_INDEX(a,b)+1)
0790デフォルトの名無しさん
2013/01/27(日) 23:55:39.870791デフォルトの名無しさん
2013/01/28(月) 00:38:40.70コードをみせろ判定してやる
0792デフォルトの名無しさん
2013/01/28(月) 01:27:33.310793デフォルトの名無しさん
2013/01/28(月) 01:30:59.010794デフォルトの名無しさん
2013/01/28(月) 05:05:08.56留年するか中退
0795デフォルトの名無しさん
2013/01/28(月) 15:11:25.800796デフォルトの名無しさん
2013/01/28(月) 15:29:15.310797デフォルトの名無しさん
2013/01/28(月) 15:57:28.130798デフォルトの名無しさん
2013/01/28(月) 16:03:44.530799デフォルトの名無しさん
2013/01/28(月) 16:20:03.180800デフォルトの名無しさん
2013/01/29(火) 03:28:08.54/*省略*/
}
って感じでセミコロン無しでメンバ関数呼び出した後にブロック書いてるコードがあったんだけどこれってどうやるの?
0801デフォルトの名無しさん
2013/01/29(火) 03:29:50.18class Example
{
private:
int val;
public:
Example(int _val) : val(_val) {}
bool Compare(const Example& target) const { return (this->val == target.val); }
};
Compare内でtargetのプライベートメンバを直接参照してもコンパイルエラーに
ならないのですが、自身と同じクラス(もしくはアップキャストできるクラス)の
インスタンスであれば関数内でプライベートメンバにアクセスできるということでしょうか?
0802デフォルトの名無しさん
2013/01/29(火) 05:18:20.05自分自身はできる
親(基底)クラスはダメ
後者を許すために protected がある
0803デフォルトの名無しさん
2013/01/29(火) 05:57:50.96理解があやふやな部分の確認をお願いしたいです。
Person & operator=(const Person & psn); について、
Person & operator= の&はアドレスを指す&のことで、
つまり返値は&Person(Personの先頭アドレス)であると解釈して良いでしょうか?
実際の定義を見ると返値がreturn *this; になっているのですが。
つまりポインタthisの実際に指すデータはオブジェクトPersonの先頭アドレスということですか?
this自体がポインタなのに、*thisもアドレスを指すというのがしっくり来ないのですが。
>Person & operator= の&は
参照です。
>ポインタthisの実際に指すデータはオブジェクトPersonの先頭アドレス
ですが、
>*thisもアドレスを指す
わけではありません。
宣言で int *p と書いたとき、p はアドレスではあっても、*p はアドレスではなく、p が指し示すなにかのオブジェクトそのものでしょう、それと同じです。
0805デフォルトの名無しさん
2013/01/29(火) 06:19:25.29ああ。なるほど。アドレスを見る&ではなくて、参照の&でしたか。
つまりここで参照を使っているのは、thisが大きなデータかもしれないので、
コピーした値を返すより効率よいという理由なのですね?
これは個人的な見解ですが、参照は表記の上でインスタンスを渡すように記述しながら実はアドレス渡しをているだけ――糖衣構文――と考えています。
こちらでは、きっちりポインタで(あたかもアセンブラレベルで)記述するのと、参照を使ってわかりやすい(かどうかは議論のところかもしれませんが)記述をとることを比較しています。
(私はかいてみないとわからない人ですから‥‥orz)
http://toro.2ch.net/test/read.cgi/tech/1313183984/605
もっとも & は const と一緒に使ってコンストラクタ発動を防止する、とかが普通の使い方のようですけど。
0807デフォルトの名無しさん
2013/01/29(火) 07:40:18.120808デフォルトの名無しさん
2013/01/29(火) 11:07:01.400809デフォルトの名無しさん
2013/01/29(火) 11:19:45.16全然先に進めてないね。
いったん自分の知識を体系立てて学びなおした方がよさそう。
0810デフォルトの名無しさん
2013/01/29(火) 13:53:32.140811デフォルトの名無しさん
2013/01/29(火) 13:55:01.420812デフォルトの名無しさん
2013/01/29(火) 15:11:27.920813デフォルトの名無しさん
2013/01/29(火) 17:40:19.17ありがとう、なんだか不思議な感じ
0814デフォルトの名無しさん
2013/01/29(火) 17:41:39.650815デフォルトの名無しさん
2013/01/29(火) 20:55:04.230816デフォルトの名無しさん
2013/01/29(火) 21:32:47.730817デフォルトの名無しさん
2013/01/29(火) 21:43:31.090818デフォルトの名無しさん
2013/01/29(火) 21:47:10.93ご指摘感謝いたします。たしかに自身でもうすうす感じるところです。
言語仕様を今一度押さえるべきでしょうか?
言語処理系自体にも興味があるのでセオリーを成書で学ぶべきでしょうか?
それとも応用分野を決めて追求していくべきなのでしょうか?
0821デフォルトの名無しさん
2013/01/30(水) 02:50:11.18ム板の汚物の2匹は専用スレ作ってそこから出てくるな
0823デフォルトの名無しさん
2013/01/30(水) 14:10:55.470824デフォルトの名無しさん
2013/01/30(水) 22:57:09.540825デフォルトの名無しさん
2013/01/31(木) 16:33:31.080826デフォルトの名無しさん
2013/01/31(木) 16:40:16.950827デフォルトの名無しさん
2013/01/31(木) 17:06:43.61if(cond1) /*何かする*/
if(cond2) /*何かする*/
if(cond3) /*何かする*/
というのコードを挿入する場合、cond1とcond2とcond3が全部ランダムに変化する場合は遅くなるが、
main関数で一度設定された後変わらない場合は、分岐予測が全部ヒットして速度が変わらないという認識で問題ないでしょうか?
(ただし、if文の/*何かする*/はa = bなどのほとんど計算時間のかからない処理だとします。)
0828デフォルトの名無しさん
2013/01/31(木) 17:08:30.580829デフォルトの名無しさん
2013/01/31(木) 17:11:48.080830デフォルトの名無しさん
2013/01/31(木) 17:22:25.41すみません言葉足らずでしたが、cond1〜3はmain関数内で(正確に言うと上記関数を呼び出す前の段階で)
外部の設定ファイルを読み込んで動的に決定されるものとしてください
0831デフォルトの名無しさん
2013/01/31(木) 17:31:47.69小さな効率のことは忘れ、時間の97%について語ろう。時期尚早な最適化は諸悪の根源だ
0832デフォルトの名無しさん
2013/01/31(木) 17:40:02.460833デフォルトの名無しさん
2013/01/31(木) 17:46:19.72せいぜいあたればいいなって思っとくぐらいで
そんなことより手を動かすべきだろう
0834デフォルトの名無しさん
2013/01/31(木) 17:47:31.920835デフォルトの名無しさん
2013/01/31(木) 17:57:03.21/*何かする*/
の組み合わせを全パターン用意して
関数ポインタで呼び出したら、ifの判定いらなくなるよ
0836デフォルトの名無しさん
2013/01/31(木) 18:09:45.64こんな人が2chに居るわけがないだろ…
あんたに分岐予測という機能を教えた人に聞けばいいんじゃないか?
0837デフォルトの名無しさん
2013/01/31(木) 18:13:24.28教えて下さい。
0838デフォルトの名無しさん
2013/01/31(木) 18:18:32.33詳しくてわかりやすく書かれてますよ
それでもわからない点がでてきたときに改めてここに書き込めばいいでしょう
0839デフォルトの名無しさん
2013/01/31(木) 18:20:48.070840デフォルトの名無しさん
2013/01/31(木) 18:22:45.21関数なんかの苗字ですよ
Hoge家のfuga関数って感じ
0841デフォルトの名無しさん
2013/01/31(木) 18:26:06.13俺もだが2chは低脳ゆとりだらけだからな
0842デフォルトの名無しさん
2013/01/31(木) 18:34:14.310843デフォルトの名無しさん
2013/01/31(木) 19:15:09.09ありがとうございます。
なんでcppでは「苗字」が必要になったんですか?
cにはないですよね?
0844デフォルトの名無しさん
2013/01/31(木) 19:19:40.080845デフォルトの名無しさん
2013/01/31(木) 19:23:13.19当たればイイナくらいに思っておいた方がいい
0846デフォルトの名無しさん
2013/01/31(木) 19:47:59.65実はCの時代にも、名称被りを防ぐために
会社名_プロジェクト名_機能別カテゴリ_プログラマ苗字_関数名( )
みたいな命名をすることがあったらしい。(もちろんこれは極端な例だが)
0847デフォルトの名無しさん
2013/01/31(木) 19:53:43.67自分で作ってるプログラムなら変更出来るが
0848デフォルトの名無しさん
2013/01/31(木) 20:12:14.14やりたいのは
struct C {
std::map<int, C> val;
};
みたいなことです。
GCCだとコンパイルは通るのですが、規格を読むと明示的にOKとは書いてないようで、
規格のクラス定義の内容にも「実装依存」の箇所があり自分では判断できませんでした。
0849デフォルトの名無しさん
2013/01/31(木) 20:19:27.720850デフォルトの名無しさん
2013/01/31(木) 20:25:37.96テンプレートのインスタンス化が起こる地点で完全型になっていればOK。
0851デフォルトの名無しさん
2013/01/31(木) 20:25:47.000852デフォルトの名無しさん
2013/01/31(木) 20:32:36.92In certain cases (replacement functions, handler functions, operations on types
used to instantiate standard library template components), the C++ Standard
Library depends on components supplied by a C++ program.
If these components do not meet their requirements, the Standard places no requirements
on the implementation.
In particular, the effects are undefined in the following cases:
(...)
--- if an incomplete type (3.9) is used as a template argument when instantiating
a template component.
0853デフォルトの名無しさん
2013/01/31(木) 20:35:13.25コンパイルエラーになっても文句は言えんだろうね
0854デフォルトの名無しさん
2013/01/31(木) 20:46:53.43回答ありがとう。
大体動くような気がするけど、規格でダメだと決まってて、
ポインタでも使ってどうにかしろと。
0855デフォルトの名無しさん
2013/01/31(木) 20:48:17.24>>850の言う通りで、>>848のそれだけではインスタンスが生成されないから
なんともいえない。インスタンスの部分まで示さないと
0856848
2013/01/31(木) 20:56:12.25あれ? C::valの宣言のところでstd::map<int, C>型のインスタンス化
が起きて、その時点でCは不完全型だからダメって話じゃないの?
0857デフォルトの名無しさん
2013/01/31(木) 21:19:48.44なのが普通の実装
だけど規格は保証してくれない
0858848
2013/01/31(木) 22:15:10.84>>857 テンプレートクラスのインスタンス化はそのインスタンスを
使用した(848ではC::valの宣言)時点で起きるのであって、struct Cの
インスタンスを定義した時点ではないと思ってたけど、そういう
コンパイラもあり(というか普通はそう)ってことですか?
GCCが実際通ったり>>853で言われた「問題のある実装は特にない」
のはstd::mapがstruct Cのポインタまたは参照しか使用しないから
だと思ってた。
0859デフォルトの名無しさん
2013/01/31(木) 23:18:13.46Cはテンプレートじゃなくて普通のクラスなわけで「Cをインスタンス化」の意味がわからない。
0860デフォルトの名無しさん
2013/01/31(木) 23:19:52.75問題が起きないよという事
0862デフォルトの名無しさん
2013/01/31(木) 23:58:40.67分かった方が良いと思うぞ
0863デフォルトの名無しさん
2013/02/01(金) 15:05:22.27とint 100ってメモリ使用量同じなんですか?
0864デフォルトの名無しさん
2013/02/01(金) 15:10:04.31どっちも同じです
0865デフォルトの名無しさん
2013/02/01(金) 15:55:03.820866デフォルトの名無しさん
2013/02/01(金) 16:04:37.94a += 100;
これやったら、a は
65530+100-65536=94
になるんでしょうか
0867デフォルトの名無しさん
2013/02/01(金) 17:11:20.10クラス内で参照を宣言しようとしたところ「静的メンバじゃないと初期化できないよ」って
コンパイラに怒られました
0868デフォルトの名無しさん
2013/02/01(金) 17:13:55.880869デフォルトの名無しさん
2013/02/01(金) 17:20:07.06振る舞いは同じ方が嬉しいですね・・・
一応、コンストラクタの初期化子で指定するとエイリアスとして機能するみたいですが
コンストラクタだと誰かがまたこれを継承した場合、確実にエイリアスとして動作するか保証しにくいような・・・
これはconstメンバーと同じで仕方ないのでしょうか
0870デフォルトの名無しさん
2013/02/01(金) 19:37:41.33なにもない。ただ、2の乗数だとキリがいいような気がする。
0871デフォルトの名無しさん
2013/02/01(金) 21:45:22.41プログラマの習性ってだけ
100,1000よりも256,1024の方が切りの良い数字に見えるのがプログラマ
0872デフォルトの名無しさん
2013/02/01(金) 22:09:00.18あとたった24で切りが良くなるのにって思ってしまう
0873デフォルトの名無しさん
2013/02/01(金) 22:15:17.77チョット小さい確保は逆に美しく見える
0874デフォルトの名無しさん
2013/02/01(金) 22:17:10.187よりも8の方がキリがいい。
単に、キリがいいので、という理由からかもしれないし、
アライメントの関係上2のべき乗にしているのかもしれない。
0875デフォルトの名無しさん
2013/02/02(土) 00:30:58.340876デフォルトの名無しさん
2013/02/02(土) 00:34:36.78->より.の方が打鍵数が少ないとか
const参照にする前にNULLチェックしておけば
以降NULLでない事がコード上見て取れるとか
constなのは変更しないのならその方が安全だからだな
0877デフォルトの名無しさん
2013/02/02(土) 00:35:32.570878デフォルトの名無しさん
2013/02/02(土) 00:40:46.74こんな感じです
0879デフォルトの名無しさん
2013/02/02(土) 00:55:57.25constポインタへの非const参照だ
const Kurasu* p;
func(p);
として、func 内で p に値を入れてもらう使い方が普通かな
0880デフォルトの名無しさん
2013/02/02(土) 01:06:27.49void* operator new[](size_t a)
{
void* ptr = ::malloc(s);
map[ptr] = a;
return ptr;
}
void operator delete[](void* p)
{
heapsize = map[p]; (GetHeapsize(void* p)などに使える)
::free(p);
}
例えばnew[]してdelete[]するだけのプログラムで,ptr != pとなってしまっています(Windows/VS2012使用)
別のmallocを使う(…と上手くいく)以外にいい方法は無いでしょうか
0881デフォルトの名無しさん
2013/02/02(土) 01:18:02.84ptr == p ですが,deleteのp != GetHeapSize(p)のpとなっているのが問題です
0882デフォルトの名無しさん
2013/02/02(土) 01:34:50.650883デフォルトの名無しさん
2013/02/02(土) 01:36:37.20引数に渡ってくるサイズが未規定で、環境に応じて挙動も変わりうる
GCCで実験した場合は、new[] に渡されるサイズは次のようになる
・デストラクタを持たない型の場合
→ 型のサイズ×要素数
・デストラクタを持つ型の場合
→ 型のサイズ×要素数+要素数を保持する領域のサイズ(8)
オーバーロードした new[] から返したアドレスに
要素数を保持する領域のサイズを足した値が実際の new[] から返されて、
要素数は自動的に入れられるようだ
この要素数は delete[] 時にデストラクタを呼ぶループの周回数を決めるのに使われる
で、delete[] 時は ptr == p になってくれるので
そのまま free してしまえばいい
VC++ではこれが ptr != p になってくれないということだが、
もしかしたらVC++では要素数分のオフセットの扱いがGCCとは異なるのかもしれない
ptr と p をダンプして、4 か 8 くらいずれてたらビンゴだと思う
0884デフォルトの名無しさん
2013/02/02(土) 01:40:40.30通常の new/delete でこれやろうとすると
map がメモリ確保を行った時に無限ループに陥ると思われる
new/delete を使わない allocator を map に指定してやるといい
0885デフォルトの名無しさん
2013/02/02(土) 01:47:38.49なら多分GCCとVC++は同じ挙動だと思う
(余分に確保する領域のサイズは異なるかもしれないけど)
GetHeapSize の p にならないのは
要素数を保持する領域のサイズ分ずれてるからだな
でも、ズレるかズレないかは型次第なので
new[]/delete[] の内部からは分からない
0886デフォルトの名無しさん
2013/02/02(土) 01:48:13.28gcc,g+ですが、言い換えれば
func1();
err=system("ps");
func2();
のコードの時、func2()のコールはかならずsystem()の後であることが言語ライブラリ仕様で保障されているかどうかということです。
それから、system("sh -c ps")とシェル経由の時では、呼び出し元は同期するためにsystemコール・コマンドが完了復帰するまで待つのでしょうか。
0887デフォルトの名無しさん
2013/02/02(土) 01:53:53.14まあ&つけなきゃ同期だろ
プログラムのreturnコードを返す仕様なんだし
0888デフォルトの名無しさん
2013/02/02(土) 02:08:02.54大変参考になりました,まずはオーバーロード以外の方法を考えてみたいと思います
0889デフォルトの名無しさん
2013/02/02(土) 02:08:11.06そう思ってたんですが、仕様では返却値はNULLのときはcmdが可能かどうかで、NULL以外はコンパイラ定義の値であってプログラム実行成否ではないみたいです。
&をつけるのもshell/cmd processerの問題なので言語ライブラリ仕様とは関係なく、system機能の仕様で同期なのか非同期なのかはやはり環境・コンパイラ依存なのでしょうか。
どちらかはっきりしないとsystem()を使ったコードはかなり煩雑になると思うんですが。
一応g++ですがbetter cとjava jniで使っているので本来はc99の環境が前提です。
0890デフォルトの名無しさん
2013/02/02(土) 02:38:37.26int
main(void)
{
system("date");
printf("hello\n");
}
0891デフォルトの名無しさん
2013/02/02(土) 03:32:26.76__execve
を呼び出してるよ
0892デフォルトの名無しさん
2013/02/02(土) 08:14:37.08unsigned intだったら、いつも使ってるintのマイナス無し版ってわかるのに
わざわざlong選択してる意図がよくわからない
0893デフォルトの名無しさん
2013/02/02(土) 08:30:21.950894デフォルトの名無しさん
2013/02/02(土) 08:45:16.64「DWORD は 32bit符号なし整数型」として決めたから long を使ったのでしょう。
int だと、処理系によってビット幅が変わるから。
0895デフォルトの名無しさん
2013/02/02(土) 09:28:59.86WORD, DWORDはプラットフォーム非依存の16ビット、32ビット整数なんだけど、
16ビット時代のVC++ではshortとintが16ビット、longが32ビットだったから、
unsigned int で定義すると環境によってビット数が変わってしまう。
0896デフォルトの名無しさん
2013/02/02(土) 10:12:35.23systemはセキュリティ上問題ある関数だから
普通は環境依存のもうちょい安全な関数を使うよ
そっちならもう少し環境に応じた保証があると思う
0897デフォルトの名無しさん
2013/02/02(土) 10:47:17.74kwsk
0898デフォルトの名無しさん
2013/02/02(土) 10:59:14.160899デフォルトの名無しさん
2013/02/02(土) 10:59:23.42>そう思ってたんですが、仕様では返却値はNULLのときはcmdが可能かどうかで、
返却値が NULL ?
system( ) の戻り値は int だぞ。
まじで、日本語の勉強からした方が良いレベルだと思う。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/system.3.html
> エラーが発生した場合 (fork(2) に失敗した場合など)、-1 を返す。
> そうでなければ、コマンドのステータスを返す。
> command の値が NULL のときは、 system() はシェルが利用可能ならゼロ
> 以外の値を返し、利用不可ならゼロを返す。
あと、べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、
それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
可能なら避けたほうが良い。
0900デフォルトの名無しさん
2013/02/02(土) 11:17:56.17他人の日本語を気にしてるようだけど自分の日本語には自信あるの?
0901デフォルトの名無しさん
2013/02/02(土) 11:30:09.51扱いに重々注意が必要な時点で
セキュリティ上問題があるんだよ
0902デフォルトの名無しさん
2013/02/02(土) 11:37:04.110903デフォルトの名無しさん
2013/02/02(土) 11:49:45.510904デフォルトの名無しさん
2013/02/02(土) 11:56:26.250905デフォルトの名無しさん
2013/02/02(土) 11:56:49.89>>900
>>901
×: セキュリティ上問題がある
○: >>901 みたいな馬鹿が使うとセキュリティ上問題がある
0906デフォルトの名無しさん
2013/02/02(土) 12:04:35.93それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
可能なら避けたほうが良い。
具体的にどういう問題があるのか具体例をあげてもらえますか?
0907デフォルトの名無しさん
2013/02/02(土) 12:07:39.86この日本語がおかしいことにも気付かないとか、本当に日本人か?
0908デフォルトの名無しさん
2013/02/02(土) 12:08:16.02ググれ
炎上勉強法に乗る気はない
0909デフォルトの名無しさん
2013/02/02(土) 12:11:10.990910デフォルトの名無しさん
2013/02/02(土) 12:15:40.99http://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_04.html
>>907
なんで噛み付いてるの知らんけど、意味取れるだろ。
ちなみに、>>889 は、戻り値と引数の区別も付いてないみたいだから、指摘しただけ。
0911デフォルトの名無しさん
2013/02/02(土) 12:38:11.200912デフォルトの名無しさん
2013/02/02(土) 12:57:32.62これって使い道あるの?
0913デフォルトの名無しさん
2013/02/02(土) 13:15:06.70Cの規格にはsystem()の動作は処理系が文書化することとなっています。
UNIX系ならman systemを読めばいいんじゃないでしょうか。
0914デフォルトの名無しさん
2013/02/02(土) 13:15:19.84「べつに」の意味が分からん
0915デフォルトの名無しさん
2013/02/02(土) 13:30:16.69テーブルを参照する時とかどう?
0916デフォルトの名無しさん
2013/02/02(土) 13:40:17.230917デフォルトの名無しさん
2013/02/02(土) 13:56:43.39>> あと、{ 君 (>>899) とは } べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、
マジで理解力がなかったんだ… チーン (w
0918デフォルトの名無しさん
2013/02/02(土) 13:58:35.230919デフォルトの名無しさん
2013/02/02(土) 14:01:44.620920デフォルトの名無しさん
2013/02/02(土) 14:07:29.85>>896
> systemはセキュリティ上問題ある関数だから
この表現が不適切なのは、間違いない。
0921デフォルトの名無しさん
2013/02/02(土) 14:10:22.95「他に」でも噛み付いてくると思うけど?
0922デフォルトの名無しさん
2013/02/02(土) 14:11:06.38少なくとも日本語には噛み付かないわ
0923デフォルトの名無しさん
2013/02/02(土) 14:17:32.53まあ、そういうところしか噛み付けないんだろうけど (w
0924デフォルトの名無しさん
2013/02/02(土) 14:18:51.520925デフォルトの名無しさん
2013/02/02(土) 14:23:31.520926デフォルトの名無しさん
2013/02/02(土) 14:28:40.060927デフォルトの名無しさん
2013/02/02(土) 14:30:59.940928デフォルトの名無しさん
2013/02/02(土) 14:33:03.87晒しあげw
0929デフォルトの名無しさん
2013/02/02(土) 15:15:47.080930デフォルトの名無しさん
2013/02/02(土) 15:19:26.82>それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
>可能なら避けたほうが良い。
結局セキュリティの問題があるんじゃないか
0931デフォルトの名無しさん
2013/02/02(土) 15:27:47.37問題を起こしやすいって言ってるだけで、あるとは言ってない。
0932デフォルトの名無しさん
2013/02/02(土) 15:45:12.860933デフォルトの名無しさん
2013/02/02(土) 15:49:16.42system();そのものに問題があることと、system();の使い方によっては問題があることと、
切り分けて考えているんだけど、間違っているかな…。
0934デフォルトの名無しさん
2013/02/02(土) 16:00:14.36本当に全ての人が気をつけられるか、
自分が居なくなっても安全性が保たれるか、という事まで考えるべき
ましてやもっと安全な代替物があるんだから、
強く「問題がある」と主張して使わせないようにするのが良い
0935デフォルトの名無しさん
2013/02/02(土) 16:33:48.98どんなセキュリティーホールも悪用されない限りは安全って言ってるようなものじゃないか。
0936デフォルトの名無しさん
2013/02/02(土) 16:42:34.88開発環境VisualStudio 2012
C++についての質問をしようと思ったのですが、レスを書いているうちにハッと気付いて解決してしまいましたので、ここにご報告させて頂きます。
0937デフォルトの名無しさん
2013/02/02(土) 19:51:12.440938デフォルトの名無しさん
2013/02/02(土) 21:34:05.20c言語で、関数の引数に二次元配列を取りたいときはどのように書けばいいのでしょうか?
void check(int f[int n][int m], int x, int y, int depth)←これだとコンパイルエラーになってしまいます
配列の要素数が決まっていないとできないのでしょうか?
0939デフォルトの名無しさん
2013/02/02(土) 21:38:53.160940デフォルトの名無しさん
2013/02/02(土) 21:39:40.300941デフォルトの名無しさん
2013/02/02(土) 21:40:24.50void foo(int(*f)[5], int x)
{
for (int i = 0; i < x; i++)
for (int j = 0; j < 5; j++)
f[i][j] = i * j;
}
int a[10][5];
foo(a, 10);
のように、普通にやる場合は最初の要素数以外が固定されてしまう
これを回避するには
void foo(int* f, int x, int y)
{
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
f[i * y + j] = i * j;
}
int a[10][5];
foo(&a[0][0], 10, 5);
のように自分でインデックスを計算するしかない
0942デフォルトの名無しさん
2013/02/02(土) 21:52:25.73動的にしたいなら、他の人も書いてるようにポインタを扱って、添え字計算を自分で行うしかない
ちなみに二重ポインタでryというのは、記述を動的な二次元配列風にするのには使えるが、引数に二次元配列を渡す場合は違うぞ
0943デフォルトの名無しさん
2013/02/02(土) 21:59:38.510944デフォルトの名無しさん
2013/02/02(土) 22:00:53.25C99で可能、C11はoptionのはず。
C++は98, 03, 11すべてで不可。
0945デフォルトの名無しさん
2013/02/02(土) 22:16:04.52と書けなくもないが関数内でのアクセスがメンドイ
0946デフォルトの名無しさん
2013/02/02(土) 22:18:13.31#define N 10
#define M 5
typedef int ary[N][M];
int f(ary a){int r=0;for (int j=0;j<N;++j) for (int i=0;i<M;++i)r+=a[j][i];return r;}
0947デフォルトの名無しさん
2013/02/02(土) 22:21:22.19せいぜい配列ポインタの解説に使う程度で
Cで要素数1の配列をtypedefして
C#などの参照型みたいに扱えるように見せるテクニックはあるけど
正直悪魔的だと思う
0948デフォルトの名無しさん
2013/02/02(土) 22:24:44.03標準ライブラリでも使われているテクニックなのに大袈裟すぎだろ
0949デフォルトの名無しさん
2013/02/02(土) 22:25:47.34template <size_t U0,size_t U2>int f(int&a[U0][U1]){...}
0950デフォルトの名無しさん
2013/02/02(土) 22:26:50.92クソにまみれてろ
0951デフォルトの名無しさん
2013/02/02(土) 22:31:25.67system()についてですが処理系依存なのは分かったのですが、質問はsystem()の動作についてではありません。
system()のsub shellと同期するのか非同期なのかですが、もっとわかりやすく言い換えれば、user code(呼び出し元)がsystem()の完了復帰までブロックされているのかどうかということです。
つまりfunc2()の時点でsystem(cmd)の呼び出しは、cmdはsubshellの実行し完了していて、しかもfunc2はそのcmd完了まで待機してる(つまりプロセス・スレッドとして同期)なのが、
言語仕様で保障されているのかブロックするかどうかすらも処理系依存なのかどうかとういことです。
なおjavaではjdk14までならRuntime.exec(cmd)ですが非同期処理で、execはcmdを完了するかに係わらずすぐ復帰し、runtimeはcmdを非同期(別スレッドなど)で実行します。
引き続きお願いします。
0952デフォルトの名無しさん
2013/02/02(土) 22:39:16.41C とか C++ 使うの止めた方がいいんじゃね。
>>935
さすがにその解釈は無理があるだろ。
>>951
> 処理系依存なのは分かった
だったら、その処理系のスレに逝けよ。
0953デフォルトの名無しさん
2013/02/02(土) 22:44:41.550954デフォルトの名無しさん
2013/02/02(土) 22:45:41.14あんたが聞いてるのはどう見てもsystem()の動作だよ。
0955デフォルトの名無しさん
2013/02/02(土) 22:50:28.72javascriptなどから、外部コマンド呼びだそうとしてAPIのShellExecuteを使うと非同期になって
javascriptなのにプログラムが面倒になった経験がある。javascriptにはsystemがない。
0956デフォルトの名無しさん
2013/02/02(土) 22:51:04.12で、>>913の通り規格では決まってません。
0957デフォルトの名無しさん
2013/02/02(土) 22:57:51.51いちおう、同期だと想定してやってみて不具合が出たら直したらいい。
これが非同期で動作するコンパイラは見たことがない。
0958デフォルトの名無しさん
2013/02/02(土) 23:03:29.11上の方でも書いてあるコードを実際に自分で試せよ。同期か非同期かくらいわかるだろ
0959デフォルトの名無しさん
2013/02/02(土) 23:09:58.150960デフォルトの名無しさん
2013/02/02(土) 23:14:35.72教科書なんかには乗りにくいかもしれないが、概念は難しくはない。
ただしエラー修正やデバッグはしにくい。
0961デフォルトの名無しさん
2013/02/02(土) 23:25:35.80最近だとvc++はもちろんgcc (g++)すらも使わないで、c99仕様で、dll,soを作れるようになってるので、vc++ (win sys), gcc (linux sys)など処理系べったりのc/c++コードはそろそろ卒業かなって。
0962デフォルトの名無しさん
2013/02/02(土) 23:26:33.040963デフォルトの名無しさん
2013/02/02(土) 23:39:07.350964デフォルトの名無しさん
2013/02/02(土) 23:56:00.95なんで system( ) に固執しているんだろう?
そもそも使うのやめたほうが良いぞって言われてるんだが、人の話を聞かないタイプなんだろうな…
0965デフォルトの名無しさん
2013/02/02(土) 23:57:31.280966デフォルトの名無しさん
2013/02/03(日) 00:34:38.24例示してるのはどうみても環境依存ですから
それで汎用的な答えをもらおうとしてるところが...
0967デフォルトの名無しさん
2013/02/03(日) 01:17:23.83OS依存になるだろうけど、元々systemの挙動自体環境依存なんだから
環境にあった実行関数使え
0968デフォルトの名無しさん
2013/02/03(日) 01:34:57.710969デフォルトの名無しさん
2013/02/03(日) 01:37:03.95俺みたいにw
やっぱfork()でしょ。
0970デフォルトの名無しさん
2013/02/03(日) 07:26:09.19徹底しても労力に見合わない。環境を決めてその範囲で安全を追求する現実的だし意義も大きいぞ。
0971デフォルトの名無しさん
2013/02/03(日) 07:26:35.180972デフォルトの名無しさん
2013/02/03(日) 11:42:04.100973デフォルトの名無しさん
2013/02/03(日) 20:02:35.890974デフォルトの名無しさん
2013/02/03(日) 22:05:52.570975デフォルトの名無しさん
2013/02/03(日) 22:53:22.62c++ にも this は十分あると思うのですが、AcsionScript3 にはできて c++ にはできない this の使い方とはなんでしょうか?
0976デフォルトの名無しさん
2013/02/03(日) 23:21:16.96C++の人はthis->filedName = "SSS";なんてやるの
普通やらないでしょ
this.が無いとフィールド or ローカル変数か判断がしにくいと思ったんだ。javaの人もthisよく使うって言ってたよ。
m_ ってするのもダサいしさ、そんだけ
C++にそんな機能は無いって言ったのは間違い
0977デフォルトの名無しさん
2013/02/03(日) 23:24:15.17たまに this-> って書く人がいるけど、命名で強制的に区別させろと
0978デフォルトの名無しさん
2013/02/03(日) 23:27:08.000979デフォルトの名無しさん
2013/02/03(日) 23:29:15.370980デフォルトの名無しさん
2013/02/03(日) 23:33:36.27Javaで省略できないわけがない
0981デフォルトの名無しさん
2013/02/03(日) 23:35:12.52そもそもthis->とか長過ぎてウザくてダサい
m_の方がよっぽど良いわ
0982デフォルトの名無しさん
2013/02/03(日) 23:44:30.860983デフォルトの名無しさん
2013/02/03(日) 23:46:27.06最後に一括削除して欲しいが
0984デフォルトの名無しさん
2013/02/04(月) 00:32:26.800985デフォルトの名無しさん
2013/02/04(月) 00:34:25.66それ以外は全部省略、代わりちょっと冗長でも分かりやすい名前をつけるようにしてる
ローカル変数は使い捨てをいい事にかなり手抜きで命名をしてる
0986デフォルトの名無しさん
2013/02/04(月) 00:39:40.52色分けされるIDEばかりじゃないから
当てにしない方がいい
0987デフォルトの名無しさん
2013/02/04(月) 02:16:49.540988デフォルトの名無しさん
2013/02/04(月) 02:42:27.470989デフォルトの名無しさん
2013/02/04(月) 05:42:41.60http://toro.2ch.net/test/read.cgi/tech/1359924126/
0990デフォルトの名無しさん
2013/02/04(月) 08:07:24.6680代からテンプレートが変、次代にはちゃんともとどおりにしておくように。
0991デフォルトの名無しさん
2013/02/04(月) 15:06:29.63delete[] n; // ←ここはnだけでいいんですか?
0992デフォルトの名無しさん
2013/02/04(月) 15:16:48.400993デフォルトの名無しさん
2013/02/04(月) 15:17:25.120994デフォルトの名無しさん
2013/02/04(月) 15:31:33.390995デフォルトの名無しさん
2013/02/04(月) 16:44:37.15gdb
gdb を用いたデバッグ方法
0996デフォルトの名無しさん
2013/02/04(月) 16:45:26.330997デフォルトの名無しさん
2013/02/04(月) 21:00:44.320998デフォルトの名無しさん
2013/02/04(月) 21:21:23.400999976
2013/02/04(月) 21:48:27.75ASはthis.省略できるよ
ASはほぼJavaと同じ文法なので、Javaやったことあれば楽だよ
this->は長ったらしいので、できればスマートに書きたいと思ったんだ
vbのmeとか超キモい
1000デフォルトの名無しさん
2013/02/04(月) 21:50:26.7010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。