1read 100read
2012年4月プログラム12: 【初心者歓迎】C/C++室 Ver.78【環境依存OK】 (220) TOP カテ一覧 スレ一覧 2ch元 削除依頼
メガデモを語る fr-08 (616)
HTAをもっと流行らせる計画 Part2 (616)
関数型言語ML (SML, OCaml, etc.), Part 6 (531)
MFC相談室 mfc22d.dll (137)
くだすれDelphi(超初心者用)その54 (468)
いろんな言語で宿題 第五編 (584)

【初心者歓迎】C/C++室 Ver.78【環境依存OK】


1 :12/03/16 〜 最終レス :12/05/04
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1323692486/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

2 :
>>1乙なんだからね

3 :
環境依存とか嫌なんだけど(´・ω・`)

4 :
c++で3dゲーム作るとしたらどんな風なdll?がおすすめですか

5 :
DirectXとかOpenGLとかマジオススメ

6 :
>>5
それ以外に道がない

7 :
>>4
上位レイヤーなら
Ogre, Unreal Engine, Irrlichtとか

8 :
>>4
で、もし言語にこだわらずゲームが作りたいだけならUnityおすすめ

9 :
>>5-8
directxはよく見ますがそれ以外は聞いたことがないのばかりです
色々面白そうなのでかまってみます

10 :
C++複雑過ぎてコンパイルするのが怖い
classのメンバ関数のconst参照、演算子の多重定義、テンプレート
Cってすごくシンプルでいい言語だったな・・・

11 :
>>10
やりたい事を実行するのに必須のもんだったら別に怖いって事は無いだろうけどな。
選択権が無いのなら、お気の毒。

12 :
いや、クラスが複雑になってきてコンパイルエラー治すのに今3、4時間かかったからさ
もちろん選択権ありありで、好きでそんなC++やってるよ

13 :
5MBほどメモリ領域を必要とするメンバ変数を持つクラスがあるんだが
インスタンスをグローバル領域で生成すればスタックには格納されないよね?
謎のスタックオーバーフローで悩まされている・・・

14 :
ヒープじゃダメなんですか

15 :
gcc4, printf() で long long unsigned int を表示するときには、%の後になにをつければいいの?何をつけても警告がでるんだけど。

16 :
>何をつけても警告がでるんだけど。
大袈裟だな。
アスキーキャラクタ 1〜10文字のすべての組み合わせ試したのか?

17 :
lluでもなんでも好きなの使え
ちゃんと俺にもモリタポ払うんだろうな?

18 :

グローバル変数の初期化順番について質問があります。
test1.cpp
---------------------------
std::string a("test1");
test2.cpp
---------------------------
std::string b(a);
両方の変数がグローバル変数だったとして、この場合bの文字列が"test1"になるかは不明ですよね
で、次の場合でも文字列bが確実に"test1"になってはくれないのでしょうか?
test1.cpp
---------------------------
const std::string &testinit(){
static std::string a("test1");
return a;
}
test2.cpp
---------------------------
b(testinit());
よろしくお願いします。

19 :
おk

20 :
>>19
なりますか。
でもなんか変な感じがします。
最初のやつもbが"test1"になることを保証してもいい気がするんですが

21 :
>>17
5000モリタポお送りしたいのですがトリップがわからなくてごめんなさい。お知らせいただいてもいいのですが、>>17のトリップであることを証明してくださいね。:-)

22 :
>>10
たまにC#使うとコンパイルの速さにビビる。

23 :
バーグなら速いだろうな

24 :
>>21
お前最低な性格だな

25 :
つーか、%lluなんてマニュアルページに書いてあることを質問している段階で馬鹿確定。
その馬鹿の性格なんてどうでもいい。

26 :
そんな馬鹿のためにモリタポの可能性を潰されそうになってるのがムカつくわ

27 :
>>24
その言葉、当方には最大の賛辞と解釈します。なにせ、http://en.wikipedia.org/wiki/Doublethink こそ最高のありかたと考え日々実践していますので。

28 :
ダブルR? なんと奇遇な?

29 :
>>27
なんか勘違いしてるな。哲学の無い矛盾はただのアホだぞ

30 :
屑がダブルRwwww

31 :
初心的な質問ですが
テキストエディタなどは
文字の量などでメモリのサイズが可変的だとおもうのですが
こういうのはあらかじめある程度の領域を確保して
必要になるとまたある程度の領域を追加で確保するという形をとっているのでしょうか?
またその中で消したりなどをした際には配列を手前へとずらしているのでしょうか?

32 :
>>31
プログラミング作法を読むといいよ。
まぁ、行単位か頁単位でリンクトリストするとかstd::deque辺りを使っていると思う。

33 :
間違えた、「ソフトウェア作法」だった。

34 :
ギャップバッファ最強

35 :
スタック、ヒープ領域につい素人的な質問ですが
以下のようにAのインスタンスを動的に作成した場合は、Aのメンバ変数のBインスタンスもヒープ領域に確保されるということでよいですか?
class A{
  B b;
};
class B{
  int nHoge;
};
A a = new A;

36 :
うn

37 :
いま始めたばかりの初心者なのですが、
サイト見ながら素数判定のプログラムを書いたので
実行したいのですが、どこから実行するかどなたか教えてください

38 :
コンパイラや開発環境と呼べるようなものを持っているなら、
まずはそれの名前を書け
持っていないなら、それらをインストールしろ。
常用にはすすめられないが↓みたいなものある
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

39 :
wxWidgets2.9とmingwを使用しています。
コンパイルの仕方についての質問ですが、、このスレでよいでしょうか?

40 :
RTFM

41 :
STLで2つのコンテナの合成アルゴリズムありませんか?
例えばvector A, Bの全要素に対してplus関数オブジェクトを適用すればA[i] += B[i]してくれるようなもの。

42 :
transformでいけそうです

43 :
VC++2008はいつC++11に対応するんですか?

44 :
2010ですら中途半端なのに

45 :
transformじゃできなかったです!!どうすればいいでしょうか

46 :
>>45
できるだろ
ttp://codepad.org/xpZIG0uX

47 :
ほんとだ。ありがと。
よく見たらbinary_function継承したクラスにコンパイルエラーが出てて
実行されてたのは修正前の古いexeでした。

48 :
nelem(要素数),vec(*int)をメンバに持ち、コンストラクタでnew int[nelem]によって
int型の配列を実現するクラスIntArrayがあり
C++で自己初期化(IntArray x = x)を抑制するコピーコンストラクタを作ろうとしました
自己初期化の問題は、左辺のIntArray xの宣言子よりxは生成されるので
右辺のxはコンパイルエラーにならないが、この右辺xは未初期化(デフォルトコンストラクタにもかからない)なので
結果としてxのメンバが不定値で設定されてしまうことにあるということです
IntArray x=x;はダメだが、
IntArray t;// default constructor
x=t; //IntArray::operator=が定義済み。
にするとうまくいく。そこで、下のようにコピーコンストラクタを定義しました
IntArray::IntArray(const IntArray& x){
if(&x != this){ /*自己初期化ではない*/
nelem = x.nelem;
vec = new int[nelem];
for(int i=0;i<nelem;i++)
vec[i] = x.vec[i];
}
else{
std::cout << "※自己初期化が行われています。\n";
IntArray t;
*this = t;
}
}
するとコンパイルエラーは出ないものの実行すると
*** glibc detected *** ./a.out: free(): invalid pointer: 0xb763bff4 ***
となり、どこかでメモリの開放がうまくできていないのかプログラムが強制終了してしまいます。
前後左右でチェックして明らかに*this = t;に問題があります。
~IntArray() { delete[] vec; }がデストラクタです。
コードの中にどこか問題のある記述ありますでしょうか?

49 :
長文をかいといてすいません。
下のようにやるとうまくいきました(単純に考えうることなのに頭が回ってませんでした)
IntArray::IntArray(const IntArray& x){
if(&x != this){
・・・・
}
else{
std::cout << "自己初期化が行われています。\n";
IntArray t;
nelem = t.nelem;
vec = new int[nelem];
for(int i=0;i<nelem;i++)
vec[i] = t.vec[i];
}
}
原因が下のoperator=の自己代入抑制のコード中のdeleteで、既存の配列を開放するため
>>48のコピーコンストラクタ中のthis->vecが不定値の状態でdeleteを行っているからでした。
IntArray t; Int Array x = t が許されたのは、コピーコンストラクタが呼び出されているからなのですね。
if(this != &x){
if(nelem != x.nelem){
delete[] vec;
nelem=x.nelem;
vec = new int[nelem];
}
for(int i=0;i<nelem;i++)
vec[i] = x.vec[i];
}
お騒がせして勝手に自己解決してすいませんでした

50 :
>>48
そのクラス、コピー代入演算子やデストラクタも定義されてるんだよね?
コピー代入演算子の実装は初期化済みのオブジェクトを期待してるだろうから、
ら未初期化のオブジェクトに対して代入しちゃマズイでしょう。

51 :
>>50
まさにそういうことなんですよね・・・
コピーコンストラクタとコピー代入演算子の違いが初めてはっきり分かった気がします。

52 :
うわ、解決してた。
にしても自己初期化に何かしらの動作を与えても呼び出しもとのバグであることに
変わりはないだろうから、心配するとしても assert() ぐらいでいいと思うぜ。

53 :
>呼び出しもとのバグであることに変わりはないだろうから、心配するとしても assert() ぐらいでいいと思う
眼から鱗ですね。確かにその通りです

54 :
独習C言語を読み終わり、乗っていたすべての例題を解けるようにはなりました。
そろそろGUIなプログラムを作ってみたいのですが、次は何を理解すればよいのでしょうか?

55 :
>>54
独習C++

56 :
>>54
プラットフォームや見た目、使い勝手などから、
目的に合いそうなGUIツールキットを探す

57 :
>>54 作りたいものに応じた開発言語・ライブラリ選択基準

58 :
ふと自作クラスを作っているとき疑問に思ったのだが
C++の既存のWin32ライブラリ、例えばMFCとかATL/WTLは
BOOL型とbool型が混在しているが、メソッドの戻り値の型を例に取ると
どういう場合はBOOL型にし、またはbool型にすべきなのだろう?

59 :
>>58
自分で作るならbool、APIの戻り値をそのまま戻すなら(必要に応じて)BOOL。
ちなみに、Win32APIのBOOLは二値じゃない。

60 :
>>59
MFCなどはAPIとの整合性を重視してBOOLを使うのだろうか?
C++のライブラリであるなら言語仕様にあるboolを使うべきと思うのだが、
boolを使うデメリットがあるのでしょうか?
シリアル化の場面ぐらいしか思い浮かばないが…

61 :
Win32API 使う人の中じゃ有名だろうが、
GetMessageという関数があって、こいつはBOOL型を返すくせに、
-1、0、それ以外の値の3種類がある
そういう特別な例外だけ気にしておけば bool で構わないと思う

62 :
BOOLを返す関数の戻り値はBOOLで受ければいいお
それからエラー処理でも何でもすればいいんだお

63 :
Windowsデータ型のBOOLはBYTEの別名でBYTEはunsigned charの別名なんだっけか?

64 :
http://msdn.microsoft.com/en-us/library/aa383751
BOOLはint

65 :
>>61
実用上ではboolでキャストしても問題ないとかじゃなくて、
むしろリファレンスにboolで受けるなよ!絶対だぞ!って書かれてるのか(´・ω・`)

66 :
>>64
うは、BOOLとBOOLEANで型が違うw

67 :
以下のフォーマットになるようにバイナリデータ
を作成したいのですが、どうするのが手っ取り早いでしょうか?
[フォーマット]
┌───────┬─────┬─────┬─────┬─────┐
|2進数桁数(N桁)│   値A  │   値B  │   値C  │   値D  │
└───────┴─────┴─────┴─────┴─────┘
└   5 bit   ┘└  N bit ┘└ N bit  ┘└  N bit ┘└  N bit ┘

フォーマットの先頭にある5ビットで2進数表現の桁数が格納されており、
その後に続く値(符号付)が、桁数に従い2進数で格納されております。

例えば、
桁数:6桁
値A :0
値B :20
値C :0
値D :20
の場合、

00110 000000 010100 000000 010100 になります。
これを先頭から8ビットずつとって(8ビットにならに場合0パディング)、
バイナリに変換して、
0x30 0x0A 0x00 0xA0
というような感じにしたい。
どういうロジックにするのが簡単なのでしょうか?

68 :
>>67
ビットフィールドでググれ

69 :
任意のビット幅のポインタをクラスで作成して使えばよいんじゃね。
operatorとか使うのがよく判らないなら、Read/Write用のメンバ関数を用意してもいいし。
bit幅が64bitを超える場合はちょっと面倒になりそうではあるが。

70 :
>>69
ビット長が5ビットで表現されているんだから64bitを超えるわけないだろ。JK
>>67
で、Nが0だったらどうなんの? Nが8を超えたときも2-4バイトにパディングしていいの?

71 :
あ、違うのか。失敬。
>>67
パディングは最後だけってことね。
>>69
総ビット長が64bitを越えるってことか? だとしても、なんで面倒になるんだ?

72 :
>>67
横からだけど適当に作ってみた
http://codepad.org/HyDOJc5n

73 :
>>67-72
返事遅くなり申し訳ございませn。
レスありがとうございました。
>>68
ビットフィールドを調べました。
確かに便利だと思いましたが、ビット長が可変なので
使えないのかと思いました。
>>72
サンプルありがとうございます。
こんなに少ないロジックでできるんですね。
ただ、理解があまり出来ておりません
・数個ある条件式の意味
・変数maskが何故こうしてやればいいのか。
※ヘタレですません。
自分は必死こいて、ビットシフトやら、ビットマスクなどを
駆使してベタベタにコード書いてやっとできたんですけど、
72さんのサンプルを参考につくり治したいと思います。

74 :
他のスレッドを実行しているCPU番号を取得するAPIはありませんか?
GetCurrentProcessorNumberで自分のスレッドのCPU番号は調べられますが
他のスレッドのCPU番号はどうすればよいですか?
対象のスレッドは自分のコードではありません。
できればXPでも実現できる方法が知りたいです。

75 :
ttp://d.hatena.ne.jp/topiyama/20090623/p1
アセンブラ使えばできるらしい

76 :
その記事には行き着いたのですが、
他のスレッドからそれを実行しても意味がないと思うのです。

77 :
そんなもん取得して何がしたいのか

78 :
>>67 をbitset使って書いたらキショくなったでござる
http://ideone.com/LtgS7

79 :
他の関数に ジャンプ できますか?

80 :
>>79
制限付でsetjmp()/longjmp

81 :
2種類の全く異なるクラスがそれぞれのポインタを利用してtree状に循環参照する時に
ヘッダファイルの定義はいったいどう記述すればいいのですかね
一度だけコンパイラに参照されると片方でしか定義されないことになってしまってエラーになる
ヘッダだけでvoid*型にしてcppファイルで形指定して参照するくらいしか思い浮かばないけどダサすぎる

82 :
クラス名だけ書いておけばいいって話ではなく?

83 :
すまん、出来ればhファイルだけで完結させたくて
関数のスクリプトも全部hファイルに記述しようとしてるんだけど
名前を入れるだけではnewの部分で形が認識できないとエラーになる

84 :
inline CLASS::func(){} を知らないて話し?

85 :
んーなんかなにがやりたいかよくわからんね
エラーの出る最小コードとか作れない?

86 :
RubyスクリプトをC言語に翻訳することできますか?

87 :
>>81 >>83 ポインタのみ必要なら、class HOGEHOGE; って書いておけば?

88 :
class HOGE1;
class HOGE2;
class HOGE1 { ... HOGE2* getHoge2(); ... };
class HOGE2 { ... HOGE1* getHoge1(); ... };
inline HOGE2* HOGE1::getHoge2() { return new HOGE2; }

89 :
個人的にはツリーのノードにあたる部分のインターフェイスを定義してから
両方のクラスはそのインターフェイスを継承して作るのがいいんじゃないかと思うがどうか

90 :
VC++10のdebugビルドにおいてSTLのiteratorが有効か無効かどうかチェックが入るみたいなのですが、
これが障害となりboost::rangeにおけるemptyメンバやsizeメンバが使用できません。
原因は各種オペレーターオーバーロード時の動作に際して上述したチェックが入り、dereferenceできない内容ならばassertしてしまうからです。
これにより初期状態(例えば内部表現がnullptrのiterator)かどうかの判定ができません。
releaseビルドではチェックが入らないため問題なく扱えるのですが、どうしたら良いのでしょうか?

91 :
>>87
new するってことはデフォルトコンストラクタが必要
>>89
継承しても問題の根本が解決するわけじゃない
a.h
#pragma once
class a
{
public:
a(){}
make_b(){new b();}
}
b.h
#pragma once
class b
{
public:
b(){}
make_a(){new a();}
}
と言った具合にcやcppを使わずJavaのようにhファイルのみでクラスを実装しようとした時に
双方向で参照可能にするようなコンパイラの定義方法が存在しないので困ってる

92 :
cppに定義かけ
c++じゃそれが普通だ

93 :
>>91
a.h,b.hをまとめてab.hに書く
普通はcppに書くけどね

94 :
>>93
テンプレートでなら見たことがあるな、そういう書き方。
普段からC/C++に触ってるわけじゃないので、今でもやるのかどうかは知らないけど。

95 :
いくら初心者でもそのコードはひどい…
あとC++とJavaは単に文法が似ているだけで中身全く別の言語なんで
"Javaのように"できることはほとんどないと思ったほうがいい
むしろ危険

96 :
質問させてください。
環境:Windows7 32bit , Visual Studio 2005
fopen("r+")で取得したファイルポインタに書き込む際、
"w"で開いたかのように書き込む(内容をすべて上書きする)方法はありますか?

97 :
_chsize()または_chsize_s()

98 :
>>97
ありがとうございます!

99 :
>>91
なんでそんな上から目線なの?
もうbをaの内部クラスにしちまえよ

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Java 高速GUI SWT 3 (641)
PHPを使って2ちゃんねるにHello Worldを書き込む (172)
【あなごる】anarchy golf! (281)
Silverlight登場で.NET使い大勝利!!! Part2 (473)
ポインタを難しいと言う奴が理解できない (839)
Visual Studio 11 Part1 (384)
--log9.info------------------
ここがダメだよGoogle Chrome (383)
おめぇ〜らのディスクトップの壁紙を晒すスレ (559)
2のフォントがおかしい件について part1 (514)
XP起動時のアニメーション(ピロピロ) (765)
再インストの前にこれをバックアップしよう Part2 (759)
MSに次期ウィンドウズの仕様を注文しる! (215)
Windows7のUIは歴代Windows中最悪 Part4 (239)
【デフラグ】 断片化を防ぐ 【パーティション】 (207)
初心者〜管理者まで必読!コマンドライン(DOS Pt.8) (720)
Microsoft MVP Part2 (559)
Windows Server Update Serviceスレッド (346)
:: shelL Navi :: ver.2.00 (975)
VMware Player build.0005 (157)
    「OS」って何の略ですか?     (751)
Windows7のGUIはMacを模倣 - マイクロソフト幹部が発言 (104)
【次世代】Windows→LongHorn【新OS】 (291)
--log55.com------------------
銀行員の人員削減が凄いらしい・・・ [426957453]
声優の井澤詩織さんが今週も美しすぎると話題に [743999204]
すまん、やっぱり普通にサッカー見たほうが面白い テクニック要素がなさすぎ [358267739]
ひろゆき「丸山穂高に金渡すから竹島行ってこいつったのにあいつびびって返事なし本当口だけだわ」 [273822876]
「独身で1億円貯めて株の配当で生活」「ブサイクな嫁子供、マイホーム、マイカー、学費のために死ぬまで社畜」 どっちの人生が良い? [981135823]
【乞食速報】ゲオでスイッチが二万三千円 [135069671]
今から6時間で100万円を使い切れ。無理なら罰金100万円←流石に無理だよな? [208234178]
大人なのに、外でウンコ漏らすことってあるの? [571598972]