- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 115 名前:デフォルトの名無しさん [2008/02/07(木) 16:32:16 ]
- ありがとうございます
- 116 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:37:11 ]
- >>101
コンパイラオプション/ZlってVC6にない? これはobjファイルにLIBCMTD.LIBとかCRTへの参照を 埋め込まないようにするコンパイラオプション。 1つのlibで全てを賄えるようにもなる。 けど現実的には最適化・デバッグオプションの有無で、 少なくともRelease/Debugの2種用意すべきだと思うけど。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:48:16 ]
- >116
Zlオプションを使ったところ、DebugプロジェクトからReleaseLibを使っても警告がでなくなりました。 ありがとうございます。 (最初 Zl が ゼット・アイだと思って混乱しましたw ゼット・エルですね) しかし、StaticLibraryの作り方を詳しく解説しているサイトって全然見当たりませんね…。 Lib側としては、Releaseだけ用意しておけばいいと思うのですがどうでしょうか? Libがバグっていないと仮定して利用するのが前提ですけど
- 118 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:51:38 ]
- >>101
winmm.libってwinmm.dllの単なるインポートライブラリでは? VCのランタイムをリンクしないライブラリならそういった問題は当然起きない
- 119 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:52:47 ]
- 別にReleaseだけでもいいと思う。
DLLだとデバッグ版も提供なんて話聞かないし。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:02:19 ]
- >>118
あ、なるほど。そういえばlibにはもうひとつ「DLLとリンクするためのインポートライブラリ」という役目がありましたね。 winmmはそっちですか。 (拡張子変えればいいのになぁ…) >>119 了解しました。 >ALL 大変参考になりました。 ありがとうございました!
- 121 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:19:25 ]
- デバッグ版のlibを提供するのはlibをデバッグしてもらおうということじゃなくて、
それを使ったプログラムもLibのソースをトレースできるようにだよw
- 122 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:23:39 ]
- >121
誰への返事だ??
- 123 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:26:13 ]
- 環境依存のレスはすべてスルーしてます
- 124 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:36:05 ]
- スレタイももちろんスルーです
- 125 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:04:43 ]
- template<typename T>
void foo() { T x = T(); } intやint*などの基本型に対してテンプレートでのデフォルト初期化 を可能にするために上のような表記が許されておりint*ポインタも渡せます。 (NULLポインタに初期化されている) しかし、以下のポインタの初期化は許されていないのでしょうか? int* p = int*(); //コンパイルNGでした int i = int(); //OK
- 126 名前:デフォルトの名無しさん [2008/02/07(木) 18:05:37 ]
- ISO 9660ファイルを参照できるDLLとかありませんか
- 127 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:28:40 ]
- >>125
それはできないけど、これならできる。 typedef int* pint; template<typename T> struct identity { typedef T type; }; int* p1 = pint(); int* p2 = identity<int*>::type();
- 128 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:05:06 ]
- メモリが解放されてるかどうか確認する方法ってなんかあるかな?
void a( void* p ) { if( rand() %2 ) delete p; } void main () { char*pc = new char[100]; a(pc); // pcが解放されてなかったら解放 if( soreppoino( pc ) ) delete pc; } みたいな。
- 129 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:08:34 ]
- すまん誤爆った・・・ってここでもいいのかなこれ
- 130 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:13:57 ]
- >>127
typedefで可能ということは単なるシンタックスの問題だという ことですかね。だとしてもfoo<int*>()は結果的に int*()となるからNGのような気もしますがね。
- 131 名前:デフォルトの名無しさん [2008/02/07(木) 19:31:29 ]
-
リスト管理の時 リストのアイテムをdeleteしたとき、自動的に所属するリストからはずれる機能は、 stlでvectorとかlistとか使って所属リストを覚えて、リストからはずすより、 前後のポインタを持った、自己連結クラスのほうが速度的に早いですか? というか、deleteしたとき、自動的に所属するリストから外れるtemplateみたいなもの STLみたいな標準ライブラリにありますか?
- 132 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:34:12 ]
- >>130
単純にシンタックスの問題っぽいよ >postfix-expression: > simple-type-specifier ( expression-listopt ) (略) >simple-type-specifier: > ::opt nested-name-specifieropt type-name > ::opt nested-name-specifier template template-id > char > wchar_t > bool > short > int (略) >type-name: > class-name > enum-name > typedef-name >class-name: > identifier > template-id intやクラス名やtypedef名はOKだけどint*は構文に合致しないっていう・・
- 133 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:03:47 ]
- >>128
そういうクラスでも用意しない限り、ありません。 つーか、そんな阿呆なメモリ管理戦略はありえません。 >>131 逆に、リストにあるオブジェクトをremoveするときにdeleteしては?
- 134 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:22:12 ]
- 1904年の日露戦争の際に、ロシア正教会は全教会をあげて日本に天罰を
下すように神に祈りをささげた。結局なにも天罰は降りず、ロシアは負けた。 20年後、日本で関東大震災が発生。ロシアの物理学者カピッツァはこの事実から 「神はわれわれから9光年以内にいる」と結論を下したという。
- 135 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:47:14 ]
- お、おかしいアル・・・
/'⌒`ヽ、 5年後の世界に行ったらチューゴクがなかったアル・・・ ヽ、┗ ノ `ーー' γ⌒`ヽ /'⌒⌒ヽ、 ,-ーー-、 .|| ̄ ̄ ( ┃ ⌒ヽ / ┃ ) || ∧_∧ \ ━┛ ) .(. ┃ ) ||. ( `ハ´;) ヽ、__,ノ || _(つ¶¶と)__ /||'''''| 三 | |'(⌒) / '―――――`  ̄ \ `============'
- 136 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:51:06 ]
- >>132
なるほど。まあテンプレートのときのために用意されてる 規則なので、そのときだけ利用します。 ありがとうございました。 ところで、みなさんは原文の規格を持ってるんですか? 買うと4万近かったので高くてとても買えません。
- 137 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:14:24 ]
- JISならオンラインで読めるじゃん。画像だけど。
- 138 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:17:09 ]
- Visual C++ 6.0を使っているんですけど
C++のプログラムを実行すると c:\program files\microsoft visual studio\vc98\include\new(16) : error C2143: 構文エラー : ';' が '<class-head>' の前に必要です。 c:\program files\microsoft visual studio\vc98\include\new(16) : error C2501: '_STD_BEGIN' : 識別名を宣言するのに、型が指定されていません。 c:\program files\microsoft visual studio\vc98\include\new(16) : fatal error C1004: 予期せぬ EOF が検出されました。 と出てしまいます。 どんなプログラムでもこのエラーが出てしまい実行できません… どのようにすればこのエラーはなくなりますか?
- 139 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:18:22 ]
- >>137
そこでドラフトですよ。 若干現規格と違うけど、 古いドラフトだとまあまあ現規格に近いから十分参考にはなる。
- 140 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:25:29 ]
- >>138
必要なものが入ってないか入れる設定にしていない。 _STD_BEGINってのはSTLが使う宣言だからSTLが使えないんだろう。 (vectorでも使ってるんかね?) 俺はSTL使ってないんで後はぐーぐる先生か他の人にまかすわ
- 141 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:37:29 ]
- >>137
>>139 あれ検索できないから不便ですよね。まあ無料なのでたまに見ますが。 正式版を無料で配布して欲しいですね。
- 142 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:03:32 ]
- >>138
Visual C++ 2008 Expressとかだとどうなる?
- 143 名前:デフォルトの名無しさん [2008/02/07(木) 22:50:19 ]
- >>105
(遅くなりましたが) ありがとうございました。
- 144 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:20:56 ]
- >>128
標準では用意されていないので、人によっては解放したらその領域を指 していたポインタ変数を (* 自分で *) NULL にしておくようにしてい る人もいる。 どっちかって言うと、バグってた時の二重解放除けとか、変な領域を壊さ ないようにと言う防御策だが。 void a( void** p ) { if( rand() %2 ) delete *p; } void main () { char*pc = new char[100]; a(&pc); // pcが解放されてなかったら解放 if( soreppoino( pc ) ) delete pc; }
- 145 名前:デフォルトの名無しさん [2008/02/08(金) 01:48:10 ]
- 確保していないのにdeleteするとバグるんですが対処法ありますか
- 146 名前:デフォルトの名無しさん [2008/02/08(金) 01:50:44 ]
- 単独ではつかわないでコンストラクタ、デストラクタ内で使えば安全かなあ
- 147 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:59:05 ]
- void a( void** p ) {
if( rand() %2 ){ delete *p; *p = NULL; // delete後はNULLを入れておく } } void main () { char*pc = NULL; // ポインタは普通NULLで初期化しておく if( rand() %2 ) new char[100]; a(&pc); delete pc; // pcがNULLなら何もしない }
- 148 名前:デフォルトの名無しさん [2008/02/08(金) 01:59:41 ]
- while (cin) {
... } という処理についてなんですが、cinって最初はとりあえずtrueになるのですか? すると、いつfalseになるんですか? エラーフラグがたってればfalse、それ以外はtrueになるのかな? cinで何かデータを読み込んだ後だけtrueになるのかと思ってました。
- 149 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:00:03 ]
- > new char[100];
pc = new char[100] でした。
- 150 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:04:09 ]
- スタート
↓ 標準入力からデータがcinに行く ↓ cinがtrueになる ↓ while(cin)が評価される というかんじなんじゃね?
- 151 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:12:09 ]
- >>147
C++では汎用ポインタへのポインタって合法だったっけ。
- 152 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 03:44:28 ]
- 問題ない。
- 153 名前:デフォルトの名無しさん [2008/02/08(金) 03:55:20 ]
- coutとfstream(適当なファイルに対してオープン済みのもの)とのそれぞれに、ほぼ同じ処理を書くのですが、
1つの関数にまとめたいと思うのですが、どうすればいいでしょうか? void print((型が分からない) stream) { stream << "hogehoge" << endl; ... } こんなのも考えてみたのですが、コンパイルできず、ダメでした。 template<class T> void print(char *filename) { T outStream; if (filename) outStream.open(filename); outStream << "hogehoge" << endl; ... } どうかよろしくお願いします。
- 154 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 07:25:40 ]
- >>138
new ヘッダをインクルードする前に new をマクロで置き換えてないか?
- 155 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:49:42 ]
- >>153
std::ostream
- 156 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:53:19 ]
- サクラエディタのソースコードを眺めていたのですが、コメント部でよくわからない表記があります。
@param などはなんとなく想像がつくのですが、「//!<」や「/*! */」は何を意図しているのでしょうか。 どなたか教えてください。
- 157 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:57:37 ]
- >>156
つ[Doxygen]
- 158 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:59:11 ]
- まさに、それですね。
ありがとうございました。
- 159 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:23:53 ]
- 例外処理の使い方がいまいち分かりません
例外を投げたらその処理の中で解決した方が良いのか それとも解決方法を使う側に投げっぱなしにしてしまうのか 例外をどういう形でthrowするのがいいのか なんというか感覚的に掴みにくいというかなんというか
- 160 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:25:33 ]
- 無用物
- 161 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:32:44 ]
- 参照を返すとオブジェクトが捨てられたときに
帰ってきたものも向こうに?
- 162 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:34:05 ]
- >>159
自関数の中でリカバリできるならcatchして処理すればよい そうでないなら呼び出し元にまかせる 普通のエラー処理と同じようなもんだ 自分で処理できるならして、処理できないなら呼び出し元にエラーコードなりなんなりをreturnするだろう エラーコードのreturnが例外のthrowに変わるだけ
- 163 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:34:37 ]
- >>161
日本語で
- 164 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:48:01 ]
- >>162
そういう感じで良いんですか 気軽に使えるなら使ってみようかな・・・
- 165 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:03:21 ]
- とある3種類の計測器をモニターするプログラムなんですが
似てるけど若干ちがう命令が3つあるとします この場合 クラス分けをしていくとき 計器の共通化持つクラスを基底として、それぞれの機能をもつ派生クラスを作るか 機能の共通処理をもつクラスを基底として、それぞれの計器にあわせて派生クラスを作るか どちらが今後計器が増える可能性を加味したとき、よい設計でしょうか
- 166 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:07:41 ]
- >>165
その計測器メーカに合わせるのが一番。 あるメーカは旧型機種の機能を改変しつつ新機能を作るかもしれないし、 あるメーカは旧型機種の機能を残しつつ新機能を作るかもしれない。 なんてことは兎も角、使い易いように作れば?
- 167 名前:138 mailto:sage [2008/02/08(金) 15:05:04 ]
- 返信遅くなってすいません!
>>140 STLは使ってなくてもこのエラーなんですよ… Hello Worldみたいな文字を出力するだけのプログラムでも 実行できないです。 >>142 Visual C++ 2008 Express Editionで実行したらできました! ありがとうございます。 >>154 マクロも使ってないので違うと思うのですが… Visual C++ 6.0を使い慣れているので どうにかして実行させたいのですが・・・
- 168 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 15:22:22 ]
- class Fruit;
class Apple : Fruit; std::vector<Fruit> fruits;を作ると 抽象クラスをインスタンス化できません。 と言われるです。どうするですか?
- 169 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 15:23:31 ]
- Fruit がそういうつくりになってるんじゃないの?
- 170 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 15:24:38 ]
- >>168
class Fruitを具体化してください。
- 171 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 15:36:19 ]
- std::vector<Fruit*> fruits;
- 172 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:14:45 ]
- コンパイラにBCCを使って数値計算をしているのですが、
しばらくプログラム実行していると、EXP: OVERFLOW ERRORと出ます。 これは、exp関数に入れた値がexp関数の扱える値(doubleの範囲)よりも大きいと言うことでしょうか?
- 173 名前:デフォルトの名無しさん [2008/02/08(金) 16:23:52 ]
- >>167
俺、解決方法知ってるんだが…
- 174 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:25:09 ]
- vevtorにvcの_com_ptrは入りますか?
- 175 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:59:55 ]
- コピー初期化もコピー代入もできるから問題ないはず。
- 176 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:22:37 ]
- すいませんちょっとお聞きしたいんですが、
#include <iostream> using namespace std; int main(){ char ss[80] = "これは文字列です"; cout << ss[0] << ss[1]; return 0; } ってやって、coutで「こ」って表示されないのは、どういう理屈でしょうか??
- 177 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:24:09 ]
- UTF-8 なら3バイト必要だが、そういうわけではなくて?
- 178 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:34:20 ]
- >>176
ひょっとしてなんか変な文字がでたりしてるか?
- 179 名前:176 mailto:sage [2008/02/08(金) 22:34:23 ]
- ぐは、そうだったんですね・・2バイトでいいんだと思ってました汗
cout << ss[0] << ss[1] << ss[2]; とやったらちゃんと表示されました。 ありがとうございましたm(_ _)m
- 180 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:40:31 ]
- ちなみにWindows上だと>>176のコードで「こ」はちゃんと出た。(bcc32 / gcc@cygwin)
- 181 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:44:58 ]
- それはお前がソースをSJISで書いてるだけ
- 182 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:55:36 ]
- >>175
ども。
- 183 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:42:34 ]
- UTF-8 だと全て3バイトって訳じゃないのが面倒なところだよな。
- 184 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:43:11 ]
- >>181
UTF-16 でも出るがな。
- 185 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:17:28 ]
- 他で聞いてきます
- 186 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:20:35 ]
- fatal error LNK1104:コンパイラは、ファイルd3d9.libを開けません
とでてしまいビルドできません 手動でリンカにd3d9.libを設定しましたが無理でした どうすればよいのか
- 187 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:33:08 ]
- ファイルはあるの?
- 188 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:40:25 ]
- pathの設定はしたか?
- 189 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:58:17 ]
- More Exceptional C++が届いたんだが
いきなり最初のコードがコンパイルできねえ 一気にやる気失くした。やっぱ古い本はこんな もんかねえ。
- 190 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:00:08 ]
- ちなみにコレ
VC++2008 g++ 4.0 でも不可 #include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { (argc > 2 ? ofstream(argv[2], ios::out | ios::binary) : cout) << (argc > 1 ? ifstream(argv[1], ios::in | ios::binary) : cin ) .rdbuf(); return 0; }
- 191 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:06:46 ]
- 全く問題ないけど。まさかとは思うが、>190って2バイト空白入れたままで悪態ついているお馬鹿さん?
- 192 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:15:25 ]
- コンパイルできないときはエラーメッセージを書こう
なんてのは宿題スレでも徹底されてるような気がする。
- 193 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:17:41 ]
- gcc 4 で通らないな。
まあ当たり前だな。 右辺値の ofstream と左辺値の ostream(cout) だと 片方が右辺値なので右辺値にキャストして型を揃えようとするが、 この2つじゃどうやっても型を揃えられない。
- 194 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:20:34 ]
- VC だと右辺値の ofstream を
テンポラリオブジェクトを作成して ofstream& にキャストしてしまえるから(拡張機能) コンパイル通るかもしれん。
- 195 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 04:37:38 ]
- たぶん、ここでしか聞けないのかなと思い書き込みさせてください!
File1.cppで定義・使用している複数配列 double a[10][5] を他の ファイル(File2.cpp)でも共有して使用したいときって (File2.cpp) void CGridDlg::OnGdraw() //中で使用したい関数です { extern double a[10][5]; ・・・・・・・・ } と定義すれば使用できるものなのでしょうか。単配列(a[10]等)の時は同様の 方法で使用できたのですが。複数配列になると上記ではリンクエラー (LNK2001)がでてしまいます。環境はVC6++(MFCダイヤログベース)です。 超初心者です。Cの本を見てポインタなり、externなりが関係しそうかなと思った のですが、なかなかいい兆しが見えなくて助けを借りたい次第です。
- 196 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 07:49:02 ]
- >>191
ここに見やすく貼るために全角にしてるんよ >>192 VC++2008でのエラーメッセージだがprivateメンバーにアクセスしようとしてる らしい。 error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : private メンバ (クラス 'std::basic_ios<_Elem,_Traits>' で宣言されている) にアクセスで きません。 >>193 ostream(cout)の意味が分からないんですが。3項演算子 A ? B : C のBがrvalueでCがlvalueだからC(ここではcout)を右辺値にしようと するということかな? >>194 昔の規格なりコンパイラではOKだったのかもしれんです。
- 197 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:25:12 ]
- >>191
- 198 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:27:28 ]
- 空白orタブ <-> /**/
の置換スクリプトを希望
- 199 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:28:26 ]
- >>197
>昔の規格なりコンパイラではOKだったのかもしれんです。
- 200 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:55:15 ]
- >>196
左辺値の ostream の値である cout って意味ね。 エラーの理由はそれで問題ない。
- 201 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:50:51 ]
- >>195
externで共有させるのはお勧めしない。 他の関数で配列を参照させるためには、ポインタを渡せばよい。 関数内のローカル変数へのポインタは、その関数実行中にしか有効にならないから、一時的にしか参照・共有できない。
- 202 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:59:52 ]
- >>195
CGridDlg の private メンバ変数にして、 a の取得関数を用意すれ。 class CGridDlg { public: typedef double Hoge[5]; Hoge* GetA() { return m_a; } const Hoge* GetA() const { return m_a; } private: Hoge m_a[10]; }; Hoge* a = grid_dlg.GetA(); a[0][0] = 1;
- 203 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:37:35 ]
- 猫でもわかるを買ったんですが、
超初心者の俺にはさっぱりわかりません。 何かわかりやすい本などあったら教えてください。お願いします。
- 204 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:39:09 ]
- >>203
ちなみにC言語です。よろしくお願いします。
- 205 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:41:09 ]
- >>203
その本で分かりにくいとかじゃなくて さっぱり分からないというのであれば無理です、あきらめてください それより多少分かりやすいと評判のものもありますが、大差はありません それとも環境が用意できないとかそういうことですか?
- 206 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:54:33 ]
- >>203
その本は読んだ事はないが、サンプルをぽちぽち手で入力して実行してみなされ。 手で入力して試すのが肝心。 付属CDとかダウンロードをクリックして終わりじゃ絶対に理解できない。
- 207 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:26:37 ]
- >>200
なるほど。3項演算子は片方がrvalueのときは結果もrvalueになるという ことですね。 試したところでは、static_cast<ostream>(cout)やostream obj(cout); はできないみたいでが、そもそもostreamオブジェクトは生成できないも のなんですか?だとしたらostreamオブジェクトであるcoutはどのように 作成されたのですかね?
- 208 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:37:27 ]
- コピーしようとすると見るエラーだな
- 209 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:55:53 ]
- >>207
ostreamやistreamには、引数を取るコンストラクタがある。 coutやcinはそれを使って作られるんだろう。
- 210 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:04:36 ]
- >>207
static_cast<ostream&>(cout) とか ostream out(cout.rdbuf()); ならできる
- 211 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:06:27 ]
- >>209
>>210 ストリームとストリームバッファには弱い結合(ストリームバッファの同期) と強い結合(ストリームバッファの共有)ってのがあるみたいですね。 おそらく、コンソールデバイスに関連付けられたストリームバッファ (例えばcdevという名前だったとして)というのがシステムには存在し ていてcoutは、ostream cout(&cdev); というふうに定義されてる んでしょうね。ストリームオブジェクトをコピーできない理由は 無制限にストリームバッファをコピーしたり(メモリの浪費)、 暗黙のうちに共有できたりしたら問題が起こるからかなと思いました。
- 212 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:07:47 ]
- ストリームオブジェクトをコピーできない理由は
無制限にストリームバッファをコピーしたり(メモリの浪費)、 暗黙のうちに共有できたりしたら問題が起こるからかなと思いました。 は>>208さんへのレスでした。
- 213 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:24:28 ]
- coutをコピーするというのは意味がわからん、ってのもあるかもね
コンソール自体が2個に増えるわけじゃあるまいし
- 214 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:33:48 ]
- >>198
つかってやってください ttp://pc11.2ch.net/test/read.cgi/unix/997605845/55
- 215 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:41:15 ]
- >>205
環境が用意できないです。 それでもあきらめた方がいいですか?
|

|