12/09/21 02:15:05.41
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
スレリンク(tech板)
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(codepad.org) (コンパイルもできるし出力結果も得られる[]privateをチェック)
URLリンク(ideone.com) (時間帯によってはcodepadが重い事があるのでここも利用)
NG推奨:◆QZaw55cn4c
2:デフォルトの名無しさん
12/09/21 19:16:51.17
余裕の2ゲットモナ(´∀`)
3:デフォルトの名無しさん
12/09/21 20:57:49.50
>>1
乙
4:デフォルトの名無しさん
12/09/22 22:39:55.29
>>1乙ー
998 名前: 忍法帖【Lv=40,xxxPT】(1+0:5) [sage] 投稿日:2012/09/22(土) 01:28:45.67
蒼樹うめ
1000 名前: 忍法帖【Lv=40,xxxPT】(3+0:5) [sage] 投稿日:2012/09/22(土) 01:29:51.89
うめてんてー
↑うめてんてーって言う埋め方って一般的なもんなの?
5:デフォルトの名無しさん
12/09/22 22:53:11.18
AAもあるよ
_ / \ _
/ / {┳ }
>{、 ,>-<
// -\__/ -ヽ \ 、_、-‐ 1
ゝ ┐ . { |⊂⊃ i ⊂⊃| } } 、 T¨Τ
, -―、 {_ノ―、 \ヽ 「 ̄ ̄ フ / / 、-7 ̄ г¨Τ二7
´ } /∨ } r─\ ゝ ─ ' 厶二⊃ / \ ΓΤ J
_ノ ヽハ _ノ  ̄`|  ̄ ̄ ̄ ̄ `ーァ / ヽ、 |
\ /
>、___ イ
し′ し′
6:デフォルトの名無しさん
12/09/22 22:59:46.49
>>5
いやひだまらーだしうめ先生は知ってる
C++スレにまで出てくるとか(埋めレスとして)汎用性高杉
7:デフォルトの名無しさん
12/09/23 13:35:32.90
多数がNGワードにしてるワードを>>1 に入れるのやめようや
一部を伏せ字にするとかさ工夫してくれ
8:デフォルトの名無しさん
12/09/23 14:05:41.17
俺はNGNameでNGにしてるから>>1はNGにならない
9:デフォルトの名無しさん
12/09/23 14:26:22.26
NGNameにはしてないけどNGWordにはしてる。
10:デフォルトの名無しさん
12/09/23 14:49:48.91
だから NGName にしとけって暗に言われてるんだろ…
11:デフォルトの名無しさん
12/09/23 14:50:44.32
いや言及してるレスの方が
はるかにウザイから
12:デフォルトの名無しさん
12/09/23 14:52:02.67
たしかにw
13:デフォルトの名無しさん
12/09/23 15:22:48.54
せめて二文字
14:デフォルトの名無しさん
12/09/23 15:39:09.05
>>1をNG除外にしてるから何書かれようと問題ない
15:デフォルトの名無しさん
12/09/23 16:52:18.40
>>14で出てた(当方Jane使い)
16:デフォルトの名無しさん
12/09/23 16:59:09.68
なぁ、C++とかのオブジェクト指向プログラミングって
俺としては、もう慣れて「こういうもんだろ」ってな感じでやってるけど
要は、親玉(Objectクラス)は、子供(継承したクラス)の
情報をしってて、親玉から子供の情報を知りたい時にキャストして
子供の情報を得る。
ってな感じで良い?
まぁ、オブジェクト指向のなんたるかを語りだすと
色んな人が色んな例えして、どーでも良くなったりすんだけどね。
17:デフォルトの名無しさん
12/09/23 19:51:10.92 BE:3607405867-2BP(0)
VS10 C++ です。
BOOL hoge(CString& sValue)
{
sValue = _T("");
}
CString& sValueは参照変数で空文字で初期化を行なっていますが、MFCの使えない環境で
BOOL hoge(char& sValue)
{
//
}
このような場合のchar& sValueの初期化を行うにはどのように書いたらいいですか。
18:デフォルトの名無しさん
12/09/23 19:58:38.83
お前の言う初期化とはどういう状態になることなんだ
19:デフォルトの名無しさん
12/09/23 20:01:07.28
アホ
どう言うも何も参照で取ってんだから
sprintf(sValue,"");
で十分じゃん
20:デフォルトの名無しさん
12/09/23 20:01:07.81
>>17
文字列を空にしたいってことでしょ?
char*&sValueでsValue[0]="\0";
じゃないかな
21:デフォルトの名無しさん
12/09/23 20:02:06.31
あ、&いらなかった
22:デフォルトの名無しさん
12/09/23 20:10:49.55 BE:1546031063-2BP(0)
>>17ですが、
>>19も>>20も全部エラーになるお、やりたいことは>>20と一緒
参照渡しの文字列を空にしたいのですが
23:デフォルトの名無しさん
12/09/23 20:14:08.69
>>22
>>17の通りなら参照渡ししてるのは文字であって文字列では無い
まず引数をchar*sValueにするところから変更しなきゃ
24:デフォルトの名無しさん
12/09/23 20:33:19.12
>>19
いけず
25:デフォルトの名無しさん
12/09/23 20:36:37.69
>>22
hoge厨は初期化しなくていいから回線切れ
26:デフォルトの名無しさん
12/09/23 20:43:34.86
文字(char)なのか文字列(char*)なのかどっちなのか
27:デフォルトの名無しさん
12/09/23 20:50:36.19
文字列だお
28:デフォルトの名無しさん
12/09/23 20:53:13.55
>>17
お前hogeとか使ってて恥ずかしくねーの?
本物のゴミか?
29:デフォルトの名無しさん
12/09/23 20:56:46.87
>>28
しつけーぞhage
30:デフォルトの名無しさん
12/09/23 20:56:52.69
>>17
hogeを覚える暇はあってもコーディングの技術を身に付ける暇はないとかマジでクズ。
お前みたいな奴社会にいらないよ。
31:デフォルトの名無しさん
12/09/23 20:58:27.46
MFCが使える使えないに関わらず、std::stringを使えばいいじゃん。
32:デフォルトの名無しさん
12/09/23 21:01:35.88
#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif
33:デフォルトの名無しさん
12/09/23 21:06:12.07
もしかしてエラーの内容ってcharじゃなくてwchar_t使わなきゃいけない(もっと言えばTCHAR)だけだったりして
34:デフォルトの名無しさん
12/09/23 21:13:02.76
>>17
おい愚図
お前みたいな愚図は学校や職場では
陰で氏ねばいいのにって言われてるんだろうな
本人気づいてないけどうちの職場にもいる
35:デフォルトの名無しさん
12/09/23 21:16:27.82
>>34
ただの悪口なら気付かなくてもいいんだけど、
>>17みたいな基地害は迷惑で言われるんだからさっさと消えて欲しい。
36:デフォルトの名無しさん
12/09/23 21:18:04.57
>>17
hogeとかヴァカじゃねおまえ
37:デフォルトの名無しさん
12/09/23 21:21:32.22
>>22
キチガイが何でこのスレにいるの?
38:デフォルトの名無しさん
12/09/23 21:23:46.66
えっ
39:デフォルトの名無しさん
12/09/23 21:26:44.75
>>22
お前の存在自体がエラーwwwwwwww
40:デフォルトの名無しさん
12/09/23 21:29:08.28
>>17も可哀想な奴だと思うよ。
親がゴミみたいな奴だからロクな教育受けてこなかっだんだろ。
しかも本人自覚ないみたいから余計に可哀想。
41:デフォルトの名無しさん
12/09/23 22:02:01.86
もう全部unicodeで統一してくれないかな
42:デフォルトの名無しさん
12/09/23 22:25:43.80
>>28
本物のの hage が聞くんじゃない
43:デフォルトの名無しさん
12/09/23 22:25:48.12
>>17
ここは池沼用掲示板じゃねーんだよ
養護学校できけ精神異常
44:デフォルトの名無しさん
12/09/23 22:27:43.51
>>42は髪が薄くなり始めてるのに気付いてない。
45:デフォルトの名無しさん
12/09/23 22:39:37.79
散りゆく髪に未練などないさ俺たちは中高年
遠く弾けるドラム缶それが俺たちのオイルショック
吹き飛ばせるわけないだろ
体重計の秤量は 100kg 悪気もなく俺たちを
いぇいぇー ぶげらー
46:デフォルトの名無しさん
12/09/23 22:41:57.58
>>40
>>17みたいな本物のゴミは自覚症状ないからある意味幸せだろ
47:デフォルトの名無しさん
12/09/23 22:56:21.13
生きていたけりゃ 飲むしかないのさ
あいつはいつも俺にそういってた
そんなあいつがホスピスにいやがる
それでもいいさ楽になれたのなら
バイバイ マイ ライバル
バイバイ マイ エネミー
バイバイ マイ ボイド
灰が落ちる そしてまた「明日」はくる
俺は吐き血が混じる
いつかバブルを忘れちまうだろう
それは俺もおなじ
woo woo wooo 只じゃ買えない
家も買えない ラブホも行けない
woo woo wooo それでも消費税は
申告 せにゃならん おーいぇーべべー
# 銃声
48:デフォルトの名無しさん
12/09/23 22:59:33.53
>>17
hogeとか書いて本当に恥ずかしくないの?
49:デフォルトの名無しさん
12/09/24 00:04:33.52
またhoge嫌厨が沸いたか
50:デフォルトの名無しさん
12/09/24 00:06:59.72
win32スレと同じだな
51:デフォルトの名無しさん
12/09/24 00:32:58.38
こっちのほうがまだマシだな
向こうは常に荒れてるけど
こっちはhoge厨が湧かない限り荒れてない
52:デフォルトの名無しさん
12/09/24 00:34:49.28
やってるやつは同じじゃねぇの?
そっくりなんだが
53:デフォルトの名無しさん
12/09/24 01:22:20.62
同じだろうと同じじゃなかろうとどっちでもいいよ。
Hogeが来なければ荒れないみたいだからそれを祈るばかり。
54:デフォルトの名無しさん
12/09/24 10:09:38.93
piyo厨も入れてやれ
55:デフォルトの名無しさん
12/09/24 10:15:18.46
相変わらずhogeに対する凄まじい憎悪だな
そろそろコテ付けろよww
56:デフォルトの名無しさん
12/09/24 10:37:12.54
hogeをngに入れとけばいいだろ
57:デフォルトの名無しさん
12/09/24 10:53:27.13
それじゃ >>34 >>35 >>37 >>39 >>40 >>43 >>46 は消えねーだろww
58:デフォルトの名無しさん
12/09/24 11:22:46.70
>>57
連鎖あぼーんにすればおk
59:デフォルトの名無しさん
12/09/24 11:57:18.32
>>57
連鎖あぼーんとかない?
ブラウザによるのかな。
60:デフォルトの名無しさん
12/09/24 12:17:36.40
>>55
まあここまで叩かれるの分かっていてhoなんとか使うのは初見か荒らしだろうな
>>57
侮蔑語をNGすればOK
>>58
>連鎖あぼーん
Janeだとそういった設定は無いんだが……別の専ブラならできるの?
61:デフォルトの名無しさん
12/09/24 12:21:36.79
>>60
>侮蔑語をNG
「エラー」とか「ゴミ」とかはまだ普通に使う可能性がある単語だろ……
62:デフォルトの名無しさん
12/09/24 12:36:08.08
それはNGしなけりゃいいだろ
それでも目に入る煽りはかなり低減できるだろ
100%クリーンな世界なんてないんだからそのくらいいいと思うけどね
とりあえずHOGE連鎖あぼーんでかなり減ると思うぞ
63:デフォルトの名無しさん
12/09/24 12:50:37.67
>>60
ここに質問に来るような初心者は大抵初見だろw
毎回発狂するキチがコテつけりゃ済む話
64:デフォルトの名無しさん
12/09/24 13:17:37.13
キチガイがコテつければ済む話だがキチガイがわざわざつけてくれるのか?
現実的でない。
65:デフォルトの名無しさん
12/09/24 13:21:32.43
初見と初心者とか感激なくホゲ使っててまともな質問見たことねーな。
全ホゲあぼーんで問題なし。
66:デフォルトの名無しさん
12/09/24 13:30:54.19
できるだけまともな日本語でどうぞ。いや、そもそも個人の感想なんてどうでもいいのだけれど。
67:デフォルトの名無しさん
12/09/24 13:42:17.91
>>66は自分ではまともな日本語で書き込んでると思ってるのかなw
68:デフォルトの名無しさん
12/09/24 13:51:00.04
>>63-65あたりを煽るために
わざと珍妙な日本語で書いてんだろ
お前釣られてんだよ
69:デフォルトの名無しさん
12/09/24 16:04:19.42
スレ住人「あぼんするのでコテつけてください!」→マジキチ「了解です!コテつけます!」
性善説をこじらせるとこういう流れが妄想できるようになるの?
70:デフォルトの名無しさん
12/09/24 17:55:10.54
俺はhoge厨もアンチも両方スルーできるけど、気になる奴はとりあえずNG設定しとけばいいんじゃね
hogeならNG設定しても困らんだろ
71:デフォルトの名無しさん
12/09/24 22:17:57.88
うんこちんちん
72:デフォルトの名無しさん
12/09/24 23:20:48.87
class Hoge* g_hoge;//クラスのグローバルポインタ
class Hoge
{
public:
virtual void func(){printf("Hoge World!\n");
}
class Fuga : public Hoge
{
73:デフォルトの名無しさん
12/09/24 23:21:35.58
おう間違えた
もういいや、寝る
74:デフォルトの名無しさん
12/09/25 12:01:33.54
なにしとんねん
75:デフォルトの名無しさん
12/09/25 21:16:05.24
VisualStudio2010でプロジェクトをビルドすると
・"Debug\test.unsuccessfulbuild" のタッチ タスクを実行しています
・すべての出力が最新のものです。
・ファイル "Debug\test.unsuccessfulbuild" を削除しています。
という警告メッセージ?がでます。
Explessから移行したばっかなので何がなんだかわからないのですが、どういうものなのでしょうか?
76:デフォルトの名無しさん
12/09/25 21:27:10.57
リモートから見る時unsuccessfulbuildが存在すればビルドに失敗したんだなってわかるようになってる
普通に使ってれば気にしなくていい
77:デフォルトの名無しさん
12/09/27 15:53:06.57
なぜコンストラクタは、returnでエラーをかえせないのですか?
exit()は、できる。
78:デフォルトの名無しさん
12/09/27 17:14:02.83
return値をどうやって受け取るのですか?
79:デフォルトの名無しさん
12/09/27 17:22:27.59
(´・ω・`)知らんがな
80:デフォルトの名無しさん
12/09/27 17:24:33.50
超能力
81:デフォルトの名無しさん
12/09/27 17:32:10.12
>>77
return 先のコード書いてみな
82:デフォルトの名無しさん
12/09/27 17:39:54.69
>>77
returnが無ければ、例外を飛ばせばいいじゃない
83:デフォルトの名無しさん
12/09/27 22:26:12.35
#define SETTING_TEXT "setting.txt"
#include <fstream>
#include <iostream>
using namespace std;
class Setting {
int count;
public:
Setting() {
ifstream in(SETTING_TEXT);
if(in) {
in >> count;
} else {
cerr << SETTING_TEXT << ": " << strerror(errno) << endl;
exit(1);
}
in.close();
}
~Setting(){}
int getCount() const
{
return count;
}
};
int main() {
Setting s;
cout << s.getCount() << endl;
return 0;
}
84:デフォルトの名無しさん
12/09/27 22:32:26.94
必要なのは getCount であって return ではないな
もしかして初期化子を知らないのか?
# 知らなくても代入でどうにでもなるが
85:デフォルトの名無しさん
12/09/28 00:34:03.06
C++でゲームを作っていて、継承について質問です。
スーパークラス
┠サブクラス
┃┠サブサブクラス
┃┗サブサブクラス
┗サブクラス
┠サブサブクラス
┗サブサブクラス
という感じの「継承したクラス」を継承したクラスがあり、
そのインスタンスがあったとして、
スーパークラスのポインタとして受け取ったそのサブサブクラスのアドレスからサブクラスの型を判断するにはどうしたらいいでしょうか?
サブクラスのコンストラクタなどで型の変数を初期化するのではなく内部的な仕組みで出来る方法があれば教えてください。
言葉でうまく説明できないので用途も書きます。
スーパー・・・装備クラス(アイテムスロットを配列で持ちたい)
サブ・・・装備の種類クラス(アサルトライフル~など)
サブサブ・・・装備クラス(M4A1~など)
という感じで表現して、
「アイテムスロットの1番は銃のサブクラスしか入れることはできませんよ」
という判定をしたいんです。
ゲームスレのほうがいいとは思ったのですが、処理だけ見ればC++に機能そのものなのかなと思いゲームスレではなくこちらで質問させていただきました。
よろしくお願いします。
86:デフォルトの名無しさん
12/09/28 00:38:49.01
基底にvirtual bool IsGun()を作るとか
dynamic_castするとか
87:デフォルトの名無しさん
12/09/28 00:41:47.86
>>85
つtypeid
つdynamic_cast
88:デフォルトの名無しさん
12/09/28 00:43:16.44
typeinfoしか思いつかないなあ
89:デフォルトの名無しさん
12/09/28 00:46:35.27
要するに.NETで言う所のリフレクションみたいな機能が欲しいんだろうと予想するけど
C++11ならdecltypeって使えるな
90:デフォルトの名無しさん
12/09/28 00:47:14.91
使えねーよ
91:デフォルトの名無しさん
12/09/28 00:50:04.04
はっきり言うが設計間違えてるからやり直し
92:デフォルトの名無しさん
12/09/28 01:01:12.06
>>85
特に速度が必要ないならdynamic_castでNULL判定が楽
93:デフォルトの名無しさん
12/09/28 01:19:46.33
>>91
俺もそう思うが、設計スレじゃないし、いいんじゃね?
94:デフォルトの名無しさん
12/09/28 08:36:55.73
>>91
どんな感じにすればいいですか?
95:デフォルトの名無しさん
12/09/28 09:42:12.28
ガチ素人ですがいろいろ聞いていいですか?
96:デフォルトの名無しさん
12/09/28 12:49:39.57
そういうのは、サブクラス側に
bool canEquip(SlotType)
みたいな関数を用意すればいいんじゃね。
97:85
12/09/28 18:51:14.63
「設計を間違えている」というのが気になります。
後学のためにも教えてくれると本当に助かります。
やっぱりスーパークラスのメンバ変数をサブクラスのコンストラクタで初期化する、というのが最適なのでしょうか?
質問スレの域を脱してる、と言われたら謝ります。
98:デフォルトの名無しさん
12/09/28 18:59:06.86
まるで頭悪い発言スレだな
>>87 で FA
99:デフォルトの名無しさん
12/09/28 20:47:58.38
大体派生にしかない情報がほしくなる時点でポリモーフィック失敗してんだよ
インターフェース通じてやりたいこと全部出来るようなら(たぶん)成功した設計
ひとつでも出来ないことがあれば失敗設計
100:デフォルトの名無しさん
12/09/28 20:57:57.65
何のための dynamic_cast や
ダウンキャストしてでも派生した方が良い場合もたまにある
ただ、今回がそれかどうかは別の話だが
101:デフォルトの名無しさん
12/09/28 21:02:35.97
dynamic castするくらいならquery interfaceするわ
102:85
12/09/28 21:06:21.59
>>99
>>85でいうスーパークラスはインターフェースクラス?なのかどうかは知りませんが
virtualの装飾がついた関数しかありません。
use()=0とかdrop()=0とかpick()=0とか・・・
103:デフォルトの名無しさん
12/09/28 21:07:54.40
具体的な情報が必要な抽象化とかわろす
104:デフォルトの名無しさん
12/09/28 21:24:09.55
query interface は結局 dynamic_cast だろw
105:デフォルトの名無しさん
12/09/28 21:26:40.73
JavaだのC#だのはobjectに値を突っ込んで
ダウンキャストで取り出すなんて日常茶飯事
106:85
12/09/28 21:27:21.03
>>103
ということは、>>85でいえば
「アイテムスロットの1番は銃のサブクラスしか入れることはできませんよ」
という判定がしたい時は
逆に銃から3ウェイハンドシェイクみたいなやり取りを開始すれば完全に抽象化できるということでしょうか?
107:デフォルトの名無しさん
12/09/28 21:47:54.71
>>106
言いたいことがさっぱりわからんというかESPしても誤解が誤解を生むだけだから
なんか疑似コードでも書いておくれ
108:デフォルトの名無しさん
12/09/28 21:52:09.68
>>97
アイテムスロットに登録する人、つまり型情報から判定を行う人は誰?
スーパークラス?
109:デフォルトの名無しさん
12/09/28 21:56:32.68
まあ、装備の種類みたいなのはクラスで分けずに
パラメータ化するのが普通じゃね
110:85
12/09/28 22:49:22.65
URLリンク(codepad.org)
こんな感じです。
3ウェイハンドシェイクとか忘れてください。
111:デフォルトの名無しさん
12/09/28 23:03:22.83
そうとう重症だなこれは
112:デフォルトの名無しさん
12/09/28 23:20:37.91
>>110
ちょっとぉ、だいぶ>>85のイメージと違うんだけど。。。
ま、それはさておき、そのコードであれば素直に属性として、「種類」や「名称」を持つのが普通かなと思う。
その相互依存はいくない。
113:デフォルトの名無しさん
12/09/28 23:20:46.27
Equipにvirtual int GetSlot();を実装
Equip[tmpWeapon->GetSlot()] = tmpWeapon;
とでもしとけ
114:デフォルトの名無しさん
12/09/28 23:28:57.41
>>112
ごめん、見間違えた。
そのコードならいいんじゃね?
俺ならこうするってのはあるけど、それほどおかしくはないと思う。
強いて言えば、タイプをキーにして配列やマップに結びつけるかな。
115:デフォルトの名無しさん
12/09/29 11:36:37.73
メソッドチェイン用に外部に保持されないプロクシを作れないだろうか
// ok
obj.Proxy().Method();
// ng
auto proxy = obj.Proxy();
proxy.Method();
116:デフォルトの名無しさん
12/09/29 12:30:54.25
プロキシクラスのコンストラクタをprivateにしてプロキシを返す関数とかをfriendにすれば
117:デフォルトの名無しさん
12/09/29 19:30:44.75
MinGWでWin32APIを使っての開発を行っています。
URLリンク(codepad.org)
aaa()以降の標準出力が使用できず困っています。
WriteConsole()を_tprintf()としても同様です。
標準エラー出力(STD_ERROR_HANDLE)であれば何故か正常に出力が出来ます。
アドバイスお願いします。
118:デフォルトの名無しさん
12/09/29 19:41:33.53
だって自分で閉じてるじゃん。
何が疑問なのかわからないくらい。
119:デフォルトの名無しさん
12/09/29 20:39:33.01
汚たねぇブロック配置だな
120:デフォルトの名無しさん
12/09/29 21:45:43.59
template <class X> class Bob {
friend class X;
private:
void Fuck();
};
class Alice {
Bob<Alice> bob;
public:
void DoSomething() { bob.Fuck(); }
};
こういうふうにfriendに出来る対象をテンプレートで指定したいんですができません
どうすればうまくいきますか?
121:デフォルトの名無しさん
12/09/29 22:04:53.87
>>117
Windowsでは一般にGetしたものはReleaseするものであってCloseするものじゃない
122:デフォルトの名無しさん
12/09/29 22:19:24.47
お二方アドバイスありがとうございます。
>>118
GetStdHandle()をCreateConsoleScreenBuffer()のような感覚で使っていました。
改めて考えるとおかしいですね。
>>119
お目汚し失礼しました。
C++を学習し始めたばかりですので、お手本お願いできますか?
123:デフォルトの名無しさん
12/09/29 23:31:47.07
>>120
11ではclassを書かずに
friend X
03では適当なクラスを介して
template<class T>
struct friend_template
{
typedef T type;
};
friend class friend_template<X>::type;
124:デフォルトの名無しさん
12/09/29 23:34:58.93
>>123
!!!!!!!!!!!!!!!
!!!ありがとうございます!!!
!!!!!!!!!!!!!!!
125:デフォルトの名無しさん
12/09/30 08:25:09.20
>>115
コピーコンストラクタなどをprivateにしてもauto&&で持つことが出来るよそれ
126:デフォルトの名無しさん
12/09/30 17:07:55.29
現在C++をVisualStudio2010Expressでゲームを作っていますが、C#のようにいわゆるポトペタでGUI部品やスプライトを配置して中身をC++で書けるような技術はありますでしょうか?
Qtを調べたのですがゲームにはあまり向いていないと書いてありました。
127:デフォルトの名無しさん
12/09/30 17:46:39.17
残念ながらExpressにはリソースエディタがない
リソースファイルはテキストで直接編集するしかない
128:デフォルトの名無しさん
12/09/30 18:14:35.99
Qtを使うのならVisualStudioは要らんな。
129:デフォルトの名無しさん
12/09/30 18:23:18.96
ゲームなら自前で全部描画が基本じゃね
130:デフォルトの名無しさん
12/09/30 23:25:32.80
フリーのリソースエディタ
131:デフォルトの名無しさん
12/10/01 15:52:51.27
任意のEXEから呼出されるDLLで作成する
スレッドとファイバのスタックサイズを
4KB未満に小さくするにはどうすれば良いですか?
SetThreadStackGuaranteeというので最小スタックサイズを
変えられるようですが、小さくできないようだし、
64ビットのみだし。
32ビットXPでできる方法はありませんか?
132:デフォルトの名無しさん
12/10/01 16:14:38.57
ファイバーは知らないけど、スタックはスレッド固有の領域だから
ページサイズ以下には出来ないんじゃないの?
仮に出来てもページサイズ単位になるだろうし
133:デフォルトの名無しさん
12/10/06 09:02:38.89
VS2008 C++です。
ライブラリ等外部から取得したポインタのアライメントを確認するには
どのような方法がよいでしょうか?
今はintにキャストしてbit andをとっていますが、これが動作保証されているのか
わからないのと、Windows環境で適切なAPIがあればそちらを使いたいと思っています。
134:デフォルトの名無しさん
12/10/06 10:04:45.03
if(((char *) p - (char *) 0) % align == 0) Good();
135:デフォルトの名無しさん
12/10/06 10:24:06.85
なるほど、NULLがアドレス0ならばこれでアドレスを求められるわけですね。目から鱗です。
136:デフォルトの名無しさん
12/10/06 13:35:32.67
ところがだ、連続していることが保証されていないポインタ同士の減算は未定義だから巧くないんだな。
で、どうせ環境依存になるんだからintptr_tにキャストすればOK。
137:デフォルトの名無しさん
12/10/06 13:38:32.52
>>136
何度も議論されてるようにintptr_tではサイズが足りる保証はない
138:デフォルトの名無しさん
12/10/06 13:40:21.78
>>136
それはイテレーター全般の話だろ
ポインタはvalid rangeじゃなくてもオフセットを取得出来る
139:デフォルトの名無しさん
12/10/06 14:00:22.33
つ ptr_diff_t
140:デフォルトの名無しさん
12/10/06 14:10:00.90
>>139
それも同じでサイズが足りる保証はない
141:デフォルトの名無しさん
12/10/06 14:14:36.17
オフセット取得でサイズが足りなくなる例を一個示してくれ
何度も議論された成果を1行で示すくらい、簡単だろう?
142:デフォルトの名無しさん
12/10/06 14:16:29.60
>>141
>>135
143:デフォルトの名無しさん
12/10/06 14:33:15.52
ISO/IEC 14882:2011
Unless both pointers point to elements of the same array object, or one past the last element of the array object, the behavior is undefined.
JISX3014:2003
両方のポインタが同じ配列オブジェクトの要素又は最終要素の一つ先を指していない場合の動作は、未定義とする。
というわけで少なくともC++では未定義
ptrdiff_tなら標準にあるけどptr_diff_tはない
そもそもptrdiff_tでポインタのサイズに足りる保証はない
intptr_tなら保証されるが定義されている保証はない
144:デフォルトの名無しさん
12/10/06 14:55:31.15
>>143
なるほど、型に保証が無いのは分かったが、
if the expression P points either to an element of an array object or one past the last element of
an array object, and the expression Q points to the last element of the same array object,
なので、同じchar配列要素の場合で最終要素も超えないので、OKかと。
最終要素を超えるの意味はわかってるよね?
>>134のpがintだろうがdoubleだろうがchar*にキャストされた時点で
それらの最終要素より先をポイントしようがないよ?
charが2バイトの環境で、とか言い出されたら、もうハイハイとしか言いようがないけども
145:デフォルトの名無しさん
12/10/06 15:06:35.67
俺は>>143しかレスしてないが・・・
まあ>>134が同じ配列オブジェクトの要素だと強弁するならそれでいいんじゃないの
百歩譲っても(char*)0が配列オブジェクトの要素を指してるなんてありえないと思うけど
146:デフォルトの名無しさん
12/10/06 15:17:48.27
>>134 から始まって、最初に規格書から「配列オブジェクト」を持ちだしたのは>>144だろ
147:デフォルトの名無しさん
12/10/06 15:18:29.08
143だった
148:デフォルトの名無しさん
12/10/06 15:23:59.43
それで、結局のところ「安全にアドレスを整数変換できる方法」はどうすればいいんですか?
あなたたちはあれはだめこれはだめというばかりで一向に話を進めようとしないじゃないですか
149:デフォルトの名無しさん
12/10/06 15:25:20.34
俺はuintptr_tに突っ込んでます
150:デフォルトの名無しさん
12/10/06 15:29:42.29
「安全にアドレスを整数変換できる方法」は環境依存しないかぎり存在しない
intptr_tかuintptr_tがあればそれを使うのが安全
151:デフォルトの名無しさん
12/10/06 15:40:19.14
>>146
それが何かおかしい?
152:デフォルトの名無しさん
12/10/06 15:45:24.94
std::sprintf(buf, "%p", p);
if(BigInt::FromString16(buf) % align == 0) Good(); // EXCELLENT!!
153:デフォルトの名無しさん
12/10/06 15:55:52.11
%pでの出力形式は実装定義だからあんまり意味ないな
154:デフォルトの名無しさん
12/10/06 16:09:32.37
if(BigInt::FromBytes((unsigned char *) &p, sizeof(p), ByteOrder::Check()) % align == 0) Good(); // Amazing!!!
155:デフォルトの名無しさん
12/10/06 16:33:19.07
URLリンク(www.kouno.jp)
それだけがんばってもこういう環境ではうまくいかない件
156:デフォルトの名無しさん
12/10/06 16:38:05.76
そんなマニアックな環境はボイコットしろ
157:デフォルトの名無しさん
12/10/06 16:39:47.31
>>133の環境に限定するならUINT_PTRにでもキャストすればいいんだけどな
158:133
12/10/06 16:57:53.35
自分としてはWindows(VC)限定でいいんですが、その環境でポインタを整数に
キャストしたとき下位ビットがアライメントを表すことが保証されているかどうか、
それだけです。
159:デフォルトの名無しさん
12/10/06 18:21:42.78
2の整数乗にしかならないから下位ビットを見ればいいのはあってるけど
struct type1{ char a[10]; }; この型のアライメントは1
struct type2{ DECLSPEC_ALIGN(1024) char a;} この型のアライメントは1024
というようなことを判別する必要があるなら
(UINT_PTR)p % TYPE_ALIGNMENT(T) == 0 が真っ当な方法
160:デフォルトの名無しさん
12/10/06 19:02:42.60
>>158
アライメントの定義は下位ビットでしょ?
問題は整数にキャストできるか(かつそれがアドレス値か)どうかで、
キャストできるならその答えは Yes になる
どうせ上司あたりから受け取ったポインタのアライメントを確認するように!と
言われたんだろう。
「x86ならアライメントエラーにならないから平気ですよ」と言い返そう
そのあと「あ、ARMだと例外おきますね。ARMも対応するんですか?なら直してきます」
と言って席に向かおう
161:デフォルトの名無しさん
12/10/06 19:17:04.09
>問題は整数にキャストできるか(かつそれがアドレス値か)どうかで、
>キャストできるならその答えは Yes になる
ポインタを整数にキャストできることは保証されているが、それがアドレスか
どうかは規定されてないだろ。
162:デフォルトの名無しさん
12/10/06 19:21:27.24
ARM対応予定はないけどSSE使うから直せとか言われるオチ
163:133
12/10/06 20:06:49.56
>>162
まさに、受け取ったデータをSSEで処理したいんですが16byte alignmentを要求するので
そのチェックをしたいということです。
他の環境に移植し得るようなプログラムでポインタのアライメントをチェックしなければ
ならないような場面なんて逆に思いつかないです。
164:デフォルトの名無しさん
12/10/06 20:13:57.58
VC は alignas ないんだっけ
165:デフォルトの名無しさん
12/10/06 21:02:33.91
ない
166:デフォルトの名無しさん
12/10/06 21:50:36.98
ポインタのアラインメントっていわれると&pのアラインメントを思い浮かべちゃうんだけど
167:デフォルトの名無しさん
12/10/06 21:56:01.43
ん?それでいいんじゃないか?
それともポインタ変数のアライメントのことを言ってるのか?
168:デフォルトの名無しさん
12/10/06 22:30:27.72
void * p; &p;ってことね
アドレスのアラインメントっていってくれたほうがわかりやすい
169:デフォルトの名無しさん
12/10/07 06:28:21.41
プログラミング言語C++第三版を読んでC++の勉強をしています。
テンプレートという機能がある事を知ったので、
ある要素配が列に含まれるか調べる関数をテンプレートで書いてみました。こんなのです。
#include <stdio.h>
const char chars[] = {'a', 'b', 'c', 'd', 'e', 'f'};
templete<class T> inline bool memberOf(T x, const T elems[]) {
for(int i=0;i < sizeof(elems);i++)
if (x == elems[i]) return true;
return false; };
int main(){
if (memberOf('a', chars)) return printf("found!!\n");
return printf("not found.\n"); }
しかしgcc4.2.1は
error: expected constructor, destructor, or type conversion before '<' token
というエラーを吐いてコンパイルが出来ません。いったい何がまずいのでしょうか。
170:デフォルトの名無しさん
12/10/07 06:40:26.51
algorithmのfind()を使えば?
それとc++なら、std::coutを使いましょ
171:デフォルトの名無しさん
12/10/07 06:43:55.38
templeteがまずい
172:デフォルトの名無しさん
12/10/07 06:44:15.83
>>169
×templete
○template
あとsizeof(elems)は配列の要素数を返さないのでそれじゃまともに動かないよ
173:デフォルトの名無しさん
12/10/07 08:26:40.90
>>169
とりあえず初心者はVC++かeclipse使って色付けてもらえよ
そしたらこんなしょうもないエラーに悩まされることはないはずだから
174:デフォルトの名無しさん
12/10/07 08:28:09.60
>>170
多分標準ライブラリがあると思ったのですが、
言語の機能を学びたいとおもいこんなことをやっています。
>>171,172
> ○template
それでした、下らなくてすんません
sizeofは自分もそう思ったのですが、
char[]の配列をいくつか作って試してみた限りでは
きちんと配列の長さを返してくれたのでそのままにしてあります
これって仕様に無い実装依存の挙動だったりするんですか?
175:デフォルトの名無しさん
12/10/07 08:43:31.39
>>174
URLリンク(ideone.com)
本当に返してるかきちんと調べたか?
176:デフォルトの名無しさん
12/10/07 08:56:18.78
>>173
emacsを使ってますが色の意味が分かりませんでした……
>>175
sizeofの結果を直接printfした場合にはちゃんと長さを返してくれてたんですが、
memberOfから呼ぶとだめみたいですね。
やっぱりsizeofじゃダメみたいですね。
177:デフォルトの名無しさん
12/10/07 09:01:31.25
>>176
配列は通常の方法では関数に渡せないからね。渡しているのはポインタ。
関数内で配列のサイズを知りたければ、テンプレート引き数として配列を渡す位しか手がないよ。
178:デフォルトの名無しさん
12/10/07 09:05:46.23
>>177
まあそうなんですが
直接書いて長さ返してくれるなら
インラインは最終的に直接書いたのと同じにならないかなー、と思ったんですが
やっぱりこういうのはあんまりやらない方がいいですね
179:デフォルトの名無しさん
12/10/07 09:38:10.37
>やっぱりこういうのはあんまりやらない方がいいですね
バグの温床になるからしない方が良いかと。
180:デフォルトの名無しさん
12/10/07 10:55:28.91
>>178
template <class T, int N>
inline bool memberOf(const T& x, const T (&elems)[N]){
for(int i=0;i <N;i++)
:
}
とすればうまくいくはずです。
const char chars[] = {'a', 'b', 'c', 'd', 'e', 'f'};
memberOf('a', chars);
の場合、Nには6が設定されます。
以前同じ問題で悩んだことがあったので
参考までに。
181:デフォルトの名無しさん
12/10/08 15:47:59.92
バルバロス「バオーwwwwwwwwwww」
182:デフォルトの名無しさん
12/10/08 15:49:24.24
ルポニ「ランーーwwwwwwwwwwwwww」
183:デフォルトの名無しさん
12/10/08 16:02:19.90
コナニゾ「ムゾコナwwwwwwwwwww」
184:デフォルトの名無しさん
12/10/08 21:40:15.02
Winsockを使ったTCPで複数クライアントと接続するソフトを作りたいのですがうまくいきません。
サーバ側はacceptで待機し、接続があれば新規スレッドを作成し
acceptの戻り値のSOCKETだけ新規スレッドに渡して、ループでaccept待機に戻ります。
新規スレッド内では渡されたSOCKETを用いて送受信処理をおこなっているのですが、
クライアント①接続→クライアント②接続→①のSOCKETからデータ受信→①のSOCKETへデータ送信→②に届く
といった結果になってしまいます。
SOCKETをsend関数の第1引数に指定するだけでは送り先を変えることはできないのでしょうか?
Javaですが、以下のページと同じように作っています。
URLリンク(www.cs26.scitec.kobe-u.ac.jp)
185:デフォルトの名無しさん
12/10/08 21:45:15.74
ラゾコンナ「ンババババwwwwwwwwwwwwwwww」
186:デフォルトの名無しさん
12/10/08 22:39:33.65
>>184
send( ), recv( ) の直前でソケットの値表示して、本当に正しいソケットに
対して操作しているか確認しなよ。
もしくは、ソースさらして。
187:デフォルトの名無しさん
12/10/08 22:41:47.22
>>184
えーと、サーバ側アプリを書いているんだよね?
受信したスレッドと送信したスレッドはきちんと把握できている?
ひょっとしたら、メインスレッドで受信してメインスレッドで送信しているんじゃない?
188:デフォルトの名無しさん
12/10/08 23:25:28.29
>>186
ソケットの値も確認しました。recvで①のソケットで受信していて、sendで①のソケットを指定しているのに②に送信されます
スレッド開始など省いていますが、以下のようなソースです。事情があって受信したデータの解析・送信はメインスレッドのクラスにある関数を使っています。
CServer::mainthread(){
while(1){
socket2 = accept( socket1, &addr, &length );
CThread* cthread = new CThread( socket2, this );
cthread.start();
}
}
CServer::Send( SOCKET socket ){
CThread::CThread( SOCKET socket2 ){
Socket = socket2; //メンバ変数
}
CThread::subthread(){
JUSINDATA data;
int length;
while(1){
length = recv( Socket, &data, sizeof(data) );
if( length == sizeof(data) ){
send( Socket, &data, length );
}
}
}
>>187
上記ソースで言うとsubthreadで送り返しているのですが、実際にはsend関数は
189:デフォルトの名無しさん
12/10/08 23:26:54.96
すみません、ソース書いてる途中に間違って送信してしまいました。
>>1のサイトを使ってもう1回書きます。
190:デフォルトの名無しさん
12/10/08 23:34:41.84
URLリンク(codepad.org)
先にも書きましたが、受信データの解析・送信はメインスレッドのあるクラスの関数でおこなっています。
SOCKETを渡して、それをsendに指定しているのですが、もしかしてメインスレッドのクラスでsendしているのが問題なのでしょうか
191:デフォルトの名無しさん
12/10/08 23:53:19.41
>>188
> CThread* cthread = new CThread( socket2, this );
> cthread.start();
ホントにソース書いてる?
cthread->start(); じゃなくて?
イメージは間違ってないと思うが、こういう細かいところでミスってるんじゃないのか?
て言うか、人に見てもらうならせめてコンパイルエラーにならないソースを上げてよ…
192:デフォルトの名無しさん
12/10/09 01:35:08.28
実は java という気がします
193:デフォルトの名無しさん
12/10/09 01:37:01.29
>>191
すみません、他にもいろいろ間違ってますね。
1回間違って書き込んで無意味に焦ってしまいました。
>メインスレッドで受信してメインスレッドで送信しているんじゃない?
というのを受けてもう一度ソースを見なおしたところ、スレッドの扱いは合っていたのですが
別のところで問題があることがわかりました。
TCPがどうとかいう以前の問題でしたので、全体的にソースを見直すことにします。
ご回答して下さった方々、ありがとうございました。
194:デフォルトの名無しさん
12/10/09 06:46:12.36
サブスレッドで受けた後
メインスレッドで処理して
間違ったサブスレッドで送り返していたと
195:デフォルトの名無しさん
12/10/09 23:35:01.10
パゾコナン「マニアwwwwwwwwww」
196:デフォルトの名無しさん
12/10/09 23:36:11.75
>>180
おお、これはすごい
勉強になります
ありがとうございます
197:デフォルトの名無しさん
12/10/09 23:40:12.58
コナニーゾ「ハラバロwwwwwwww」
198:デフォルトの名無しさん
12/10/10 00:00:03.89
uyうぜーよ消えろ
199:デフォルトの名無しさん
12/10/10 00:09:00.78
コナニール「バンバンwwwwwwwwwwwww」
200:デフォルトの名無しさん
12/10/10 00:42:56.19
uyって朝鮮人だってな