トップページ⇒tech
1001コメント310KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/05(火) 01:18:41
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.47【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1200464091/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0111デフォルトの名無しさん2008/02/07(木) 16:08:21
>>109です
>(実際試してみたところ、シングルプロジェクトからマルチLibを呼び出してもエラーとなりませんでした)
これですが、勘違いでした。
やはり「マルチスレッド版のlibファイル」を「シングルスレッド版のプロジェクト」からリンクすると、
LINK : warning LNK4098: defaultlib "LIBCMTD" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
となってしまいました。
(上のは、Debugマルチ版LibをDebugシングル版のプロジェクトにリンクした場合の警告です)

>>110
なるほど。hファイルあたりで、#ifdef _DEBUG やら色々としているのでしょうか。

>そういうの避けたければスタティックリンクしてしまうといいかも。
ちょっとこの意味合いがわからないのですが、詳しく教えていただけますでしょうか
どこかのサイトへのリンクでも構いません

0112デフォルトの名無しさん2008/02/07(木) 16:26:09
教えてください。
以下の式で、shinが偽になるのはなぜでしょうか?

unsigned int a =10, b = 20;
char shin = ((a - b) < (b - a));

(a - b) = -10, (b - a) = 10 なので、shin = 真になるように思うのですが。。。
0113デフォルトの名無しさん2008/02/07(木) 16:29:04
unsigned同士の演算の結果はunsigned
0114デフォルトの名無しさん2008/02/07(木) 16:32:12
int型変数(-32768〜32767)に-40000とか入れようとしたらどうなると思う?
0115デフォルトの名無しさん2008/02/07(木) 16:32:16
ありがとうございます
0116デフォルトの名無しさん2008/02/07(木) 16:37:11
>>101
コンパイラオプション/ZlっbトVC6にない?
これはobjファイルにLIBCMTD.LIBとかCRTへの参照を
埋め込まないようにするコンパイラオプション。
1つのlibで全てを賄えるようにもなる。

けど現実的には最適化・デバッグオプションの有無で、
少なくともRelease/Debugの2種用意すべきだと思うけど。
0117デフォルトの名無しさん2008/02/07(木) 16:48:16
>116
Zlオプションを使ったところ、DebugプロジェクトからReleaseLibを使っても警告がでなくなりました。
ありがとうございます。
(最初 Zl が ゼット・アイだと思って混乱しましたw ゼット・エルですね)

しかし、StaticLibraryの作り方を詳しく解説しているサイトって全然見当たりませんね…。

Lib側としては、Releaseだけ用意しておけばいいと思うのですがどうでしょうか?
Libがバグっていないと仮定して利用するのが前提ですけど
0118デフォルトの名無しさん2008/02/07(木) 16:51:38
>>101
winmm.libってwinmm.dllの単なるインポートライブラリでは?
VCのランタイムをリンクしないライブラリならそういった問題は当然起きない
0119デフォルトの名無しさん2008/02/07(木) 16:52:47
別にReleaseだけでもいいと思う。
DLLだとデバッグ版も提供なんて話聞かないし。
0120デフォルトの名無しさん2008/02/07(木) 17:02:19
>>118
あ、なるほど。そういえばlibにはもうひとつ「DLLとリンクするためのインポートライブラリ」という役目がありましたね。
winmmはそっちですか。
(拡張子変えればいいのになぁ…)

>>119
了解しました。

>ALL
大変参考になりました。
ありがとうございました!
0121デフォルトの名無しさん2008/02/07(木) 17:19:25
デバッグ版のlibを提供するのはlibをデバッグしてもらおうということじゃなくて、
それを使ったプログラムもLibのソースをトレースできるようにだよw
0122デフォルトの名無しさん2008/02/07(木) 17:23:39
>121
誰への返事だ??
0123デフォルトの名無しさん2008/02/07(木) 17:26:13
環境依存のレスはすべてスルーしてます
0124デフォルトの名無しさん2008/02/07(木) 17:36:05
スレタイももちろんスルーです
0125デフォルトの名無しさん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
0126デフォルトの名無しさん2008/02/07(木) 18:05:37
ISO 9660ファイルを参照できるDLLとかありませんか
0127デフォルトの名無しさん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();
0128デフォルトの名無しさん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;
}

みたいな。
0129デフォルトの名無しさん2008/02/07(木) 19:08:34
すまん誤爆った・・・ってここでもいいのかなこれ
0130デフォルトの名無しさん2008/02/07(木) 19:13:57
>>127
typedefで可能ということは単なるシンタックスの問題だという
ことですかね。だとしてもfoo<int*>()は結果的に
int*()となるからNGのような気もしますがね。
0131デフォルトの名無しさん2008/02/07(木) 19:31:29

リスト管理の時
リストのアイテムをdeleteしたとき、自動的に所属するリストからはずれる機能は、
stlでvectorとかlistとか使って所属リストを覚えて、リストからはずすより、
前後のポインタを持った、自己連結クラスのほうが速度的に早いですか?
というか、deleteしたとき、自動的に所属するリストから外れるtemplateみたいなもの
STLみたいな標準ライブラリにありますか?
0132デフォルトの名無しさん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*は構文に合致しないっていう・・
0133デフォルトの名無しさん2008/02/07(木) 20:03:47
>>128
そういうクラスでも用意しない限り、ありません。
つーか、そんな阿呆なメモリ管理戦略はありえません。

>>131
逆に、リストにあるオブジェクトをremoveするときにdeleteしては?
0134デフォルトの名無しさん2008/02/07(木) 20:22:12
1904年の日露戦争の際に、ロシア正教会は全教会をあげて日本に天罰を
下すように神に祈りをささげた。結局なにも天罰は降りず、ロシアは負けた。
20年後、日本で関東大震災が発生。ロシアの物理学者カピッツァはこの事実から
「神はわれわれから9光年以内にいる」と結論を下したという。
0135デフォルトの名無しさん2008/02/07(木) 20:47:14
 お、おかしいアル・・・
/'⌒`ヽ、 5年後の世界に行ったらチューゴクがなかったアル・・・
ヽ、┗ ノ  
  `ーー'        γ⌒`ヽ           /'⌒⌒ヽ、
  ,-ーー-、      .|| ̄ ̄             (     ┃  ⌒ヽ
 /  ┃  )    ||    ∧_∧       \ ━┛    )
.(.   ┃   )   ||.   ( `ハ´;)
 ヽ、__,ノ     ||  _(つ¶¶と)__
           /||'''''|  三  |    |'(⌒)
        /    '―――――`  ̄ \
        `============'
0136デフォルトの名無しさん2008/02/07(木) 20:51:06
>>132
なるほど。まあテンプレートのときのために用意されてる
規則なので、そのときだけ利用します。
ありがとうございました。

ところで、みなさんは原文の規格を持ってるんですか?
買うと4万近かったので高くてとても買えません。
0137デフォルトの名無しさん2008/02/07(木) 21:14:24
JISならオンラインで読めるじゃん。画像だけど。
0138デフォルトの名無しさん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 が検出されました。

と出てしまいます。
どんなプログラムでもこのエラーが出てしまい実行できません…
どのようにすればこのエラーはなくなりますか?
0139デフォルトの名無しさん2008/02/07(木) 21:18:22
>>137
そこでドラフトですよ。
若干現規格と違うけど、
古いドラフトだとまあまあ現規格に近いから十分参考にはなる。
0140デフォルトの名無しさん2008/02/07(木) 21:25:29
>>138
必要なものが入ってないか入れる設定にしていない。

_STD_BEGINってのはSTLが使う宣言だからSTLが使えないんだろう。
(vectorでも使ってるんかね?)

俺はSTL使ってないんで後はぐーぐる先生か他の人にまかすわ
0141デフォルトの名無しさん2008/02/07(木) 21:37:29
>>137
>>139
あれ検索できないから不便ですよね。まあ無料なのでたまに見ますが。
正式版を無料で配布して欲しいですね。
0142デフォルトの名無しさん2008/02/07(木) 22:03:32
>>138
Visual C++ 2008 Expressとかだとどうなる?
0143デフォルトの名無しさん2008/02/07(木) 22:50:19
>>105
(遅くなりましたが)
ありがとうございました。
0144デフォルトの名無しさん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;
}
0145デフォルトの名無しさん2008/02/08(金) 01:48:10
確保していないのにdeleteするとバグるんですが対処法ありますか
0146デフォルトの名無しさん2008/02/08(金) 01:50:44
単独ではつかわないでコンストラクタ、デストラクタ内で使えば安全かなあ
0147デフォルトの名無しさん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なら何もしない
}
0148デフォルトの名無しさん2008/02/08(金) 01:59:41
while (cin) {
...
}
という処理についてなんですが、cinって最初はとりあえずtrueになるのですか?
すると、いつfalseになるんですか?
エラーフラグがたってればfalse、それ以外はtrueになるのかな?
cinで何かデータを読み込んだ後だけtrueになるのかと思ってました。
0149デフォルトの名無しさん2008/02/08(金) 02:00:03
> new char[100];
pc = new char[100] でした。
0150デフォルトの名無しさん2008/02/08(金) 02:04:09
スタート
↓
標準入力からデータがcinに行く
↓
cinがtrueになる
↓
while(cin)が評価される

というかんじなんじゃね?
0151デフォルトの名無しさん2008/02/08(金) 02:12:09
>>147
C++では汎用ポインタへのポインタって合法だったっけ。
0152デフォルトの名無しさん2008/02/08(金) 03:44:28
問題ない。
0153デフォルトの名無しさん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;
...
}
どうかよろしくお願いします。
0154デフォルトの名無しさん2008/02/08(金) 07:25:40
>>138
new ヘッダをインクルードする前に
new をマクロで置き換えてないか?
0155デフォルトの名無しさん2008/02/08(金) 10:49:42
>>153
std::ostream
0156デフォルトの名無しさん2008/02/08(金) 11:53:19
サクラエディタのソースコードを眺めていたのですが、コメント部でよくわからない表記があります。
@param などはなんとなく想像がつくのですが、「//!<」や「/*! */」は何を意図しているのでしょうか。
どなたか教えてください。
0157デフォルトの名無しさん2008/02/08(金) 11:57:37
>>156
つ[Doxygen]
0158デフォルトの名無しさん2008/02/08(金) 11:59:11
まさに、それですね。
ありがとうございました。
0159デフォルトの名無しさん2008/02/08(金) 13:23:53
例外処理の使い方がいまいち分かりません

例外を投げたらその処理の中で解決した方が良いのか
それとも解決方法を使う側に投げっぱなしにしてしまうのか
例外をどういう形でthrowするのがいいのか

なんというか感覚的に掴みにくいというかなんというか
0160デフォルトの名無しさん2008/02/08(金) 13:25:33
無用物
0161デフォルトの名無しさん2008/02/08(金) 13:32:44
参照を返すとオブジェクトが捨てられたときに
帰ってきたものも向こうに?
0162デフォルトの名無しさん2008/02/08(金) 13:34:05
>>159
自関数の中でリカバリできるならcatchして処理すればよい
そうでないなら呼び出し元にまかせる

普通のエラー処理と同じようなもんだ
自分で処理できるならして、処理できないなら呼び出し元にエラーコードなりなんなりをreturnするだろう
エラーコードのreturnが例外のthrowに変わるだけ
0163デフォルトの名無しさん2008/02/08(金) 13:34:37
>>161
日本語で
0164デフォルトの名無しさん2008/02/08(金) 13:48:01
>>162
そういう感じで良いんですか
気軽に使えるなら使ってみようかな・・・
0165デフォルトの名無しさん2008/02/08(金) 14:03:21
とある3種類の計測器をモニターするプログラムなんですが
似てるけど若干ちがう命令が3つあるとします

この場合
クラス分けをしていくとき
計器の共通化持つクラスを基底として、それぞれの機能をもつ派生クラスを作るか

機能の共通処理をもつクラスを基底として、それぞれの計器にあわせて派生クラスを作るか

どちらが今後計器が増える可能性を加味したとき、よい設計でしょうか
0166デフォルトの名無しさん2008/02/08(金) 14:07:41
>>165
その計測器メーカに合わせるのが一番。
あるメーカは旧型機種の機能を改変しつつ新機能を作るかもしれないし、
あるメーカは旧型機種の機能を残しつつ新機能を作るかもしれない。

なんてことは兎も角、使い易いように作れば?
01671382008/02/08(金) 15:05:04
返信遅くなってすいません!

>>140
STLは使ってなくてもこのエラーなんですよ…
Hello Worldみたいな文字を出力するだけのプログラムでも
実行できないです。

>>142
Visual C++ 2008 Express Editionで実行したらできました!
ありがとうございます。

>>154
マクロも使ってないので違うと思うのですが…

Visual C++ 6.0を使い慣れているので
どうにかして実行させたいのですが・・・
0168デフォルトの名無しさん2008/02/08(金) 15:22:22
class Fruit;
class Apple : Fruit;

std::vector<Fruit> fruits;を作ると

抽象クラスをインスタンス化できません。
と言われるです。どうするですか?
0169デフォルトの名無しさん2008/02/08(金) 15:23:31
Fruit がそういうつくりになってるんじゃないの?
0170デフォルトの名無しさん2008/02/08(金) 15:24:38
>>168
class Fruitを具体化してください。
0171デフォルトの名無しさん2008/02/08(金) 15:36:19
std::vector<Fruit*> fruits;
0172デフォルトの名無しさん2008/02/08(金) 16:14:45
コンパイラにBCCを使って数値計算をしているのですが、
しばらくプログラム実行していると、EXP: OVERFLOW ERRORと出ます。
これは、exp関数に入れた値がexp関数の扱える値(doubleの範囲)よりも大きいと言うことでしょうか?
0173デフォルトの名無しさん2008/02/08(金) 16:23:52
>>167
俺、解決方法知ってるんだが…
0174デフォルトの名無しさん2008/02/08(金) 16:25:09
vevtorにvcの_com_ptrは入りますか?
0175デフォルトの名無しさん2008/02/08(金) 16:59:55
コピー初期化もコピー代入もできるから問題ないはず。
0176デフォルトの名無しさん2008/02/08(金) 22:22:37
すいませんちょっとお聞きしたいんですが、

#include <iostream>
using namespace std;

int main(){
char ss[80] = "これは文字列です";

cout << ss[0] << ss[1];

return 0;

}

ってやって、coutで「こ」って表示されないのは、どういう理屈でしょうか??
0177デフォルトの名無しさん2008/02/08(金) 22:24:09
UTF-8 なら3バイト必要だが、そういうわけではなくて?
0178デフォルトの名無しさん2008/02/08(金) 22:34:20
>>176
ひょっとしてなんか変な文字がでたりしてるか?
01791762008/02/08(金) 22:34:23
ぐは、そうだったんですね・・2バイトでいいんだと思ってました汗
cout << ss[0] << ss[1] << ss[2];
とやったらちゃんと表示されました。
ありがとうございましたm(_ _)m
0180デフォルトの名無しさん2008/02/08(金) 22:40:31
ちなみにWindows上だと>>176のコードで「こ」はちゃんと出た。(bcc32 / gcc@cygwin)
0181デフォルトの名無しさん2008/02/08(金) 22:44:58
それはお前がソースをSJISで書いてるだけ
0182デフォルトの名無しさん2008/02/08(金) 22:55:36
>>175

ども。
0183デフォルトの名無しさん2008/02/08(金) 23:42:34
UTF-8 だと全て3バイトって訳じゃないのが面倒なところだよな。
0184デフォルトの名無しさん2008/02/08(金) 23:43:11
>>181
UTF-16 でも出るがな。
0185デフォルトの名無しさん2008/02/09(土) 00:17:28
他で聞いてきます
0186デフォルトの名無しさん2008/02/09(土) 00:20:35
fatal error LNK1104:コンパイラは、ファイルd3d9.libを開けません
とでてしまいビルドできません
手動でリンカにd3d9.libを設定しましたが無理でした
どうすればよいのか
0187デフォルトの名無しさん2008/02/09(土) 00:33:08
ファイルはあるの?
0188デフォルトの名無しさん2008/02/09(土) 00:40:25
pathの設定はしたか?
0189デフォルトの名無しさん2008/02/09(土) 01:58:17
More Exceptional C++が届いたんだが
いきなり最初のコードがコンパイルできねえ
一気にやる気失くした。やっぱ古い本はこんな
もんかねえ。
0190デフォルトの名無しさん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;

}

0191デフォルトの名無しさん2008/02/09(土) 02:06:46
全く問題ないけど。まさかとは思うが、>190って2バイト空白入れたままで悪態ついているお馬鹿さん?
0192デフォルトの名無しさん2008/02/09(土) 02:15:25
コンパイルできないときはエラーメッセージを書こう

なんてのは宿題スレでも徹底されてるような気がする。
0193デフォルトの名無しさん2008/02/09(土) 02:17:41
gcc 4 で通らないな。
まあ当たり前だな。
右辺値の ofstream と左辺値の ostream(cout) だと
片方が右辺値なので右辺値にキャストして型を揃えようとするが、
この2つじゃどうやっても型を揃えられない。
0194デフォルトの名無しさん2008/02/09(土) 02:20:34
VC だと右辺値の ofstream を
テンポラリオブジェクトを作成して ofstream& にキャストしてしまえるから(拡張機能)
コンパイル通るかもしれん。
0195デフォルトの名無しさん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なりが関係しそうかなと思った
のですが、なかなかいい兆しが見えなくて助けを借りたい次第です。
0196デフォルトの名無しさん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だったのかもしれんです。
0197デフォルトの名無しさん2008/02/09(土) 08:25:12
>>191
0198デフォルトの名無しさん2008/02/09(土) 08:27:28
空白orタブ <-> /**/
の置換スクリプトを希望
0199デフォルトの名無しさん2008/02/09(土) 08:28:26
>>197
>昔の規格なりコンパイラではOKだったのかもしれんです。
0200デフォルトの名無しさん2008/02/09(土) 08:55:15
>>196
左辺値の ostream の値である cout って意味ね。
エラーの理由はそれで問題ない。
0201デフォルトの名無しさん2008/02/09(土) 09:50:51
>>195
externで共有させるのはお勧めしない。
他の関数で配列を参照させるためには、ポインタを渡せばよい。
関数内のローカル変数へのポインタは、その関数実行中にしか有効にならないから、一時的にしか参照・共有できない。
0202デフォルトの名無しさん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;
0203デフォルトの名無しさん2008/02/09(土) 10:37:35
猫でもわかるを買ったんですが、
超初心者の俺にはさっぱりわかりません。
何かわかりやすい本などあったら教えてください。お願いします。
0204デフォルトの名無しさん2008/02/09(土) 10:39:09
>>203
ちなみにC言語です。よろしくお願いします。
0205デフォルトの名無しさん2008/02/09(土) 10:41:09
>>203
その本で分かりにくいとかじゃなくて
さっぱり分からないというのであれば無理です、あきらめてください

それより多少分かりやすいと評判のものもありますが、大差はありません


それとも環境が用意できないとかそういうことですか?
0206デフォルトの名無しさん2008/02/09(土) 11:54:33
>>203
その本は読んだ事はないが、サンプルをぽちぽち手で入力して実行してみなされ。

手で入力して試すのが肝心。

付属CDとかダウンロードをクリックして終わりじゃ絶対に理解できない。
0207デフォルトの名無しさん2008/02/09(土) 13:26:37
>>200
なるほど。3項演算子は片方がrvalueのときは結果もrvalueになるという
ことですね。
試したところでは、static_cast<ostream>(cout)やostream obj(cout);
はできないみたいでが、そもそもostreamオブジェクトは生成できないも
のなんですか?だとしたらostreamオブジェクトであるcoutはどのように
作成されたのですかね?
0208デフォルトの名無しさん2008/02/09(土) 13:37:27
コピーしようとすると見るエラーだな
0209デフォルトの名無しさん2008/02/09(土) 13:55:53
>>207
ostreamやistreamには、引数を取るコンストラクタがある。
coutやcinはそれを使って作られるんだろう。
0210デフォルトの名無しさん2008/02/09(土) 14:04:36
>>207
static_cast<ostream&>(cout) とか ostream out(cout.rdbuf()); ならできる
■ このスレッドは過去ログ倉庫に格納されています