> たしかC++では拡張子.hがつくヘッダは使えなくなったはず‥。
> 違うかな。
違います。標準C++ライブラリのヘッダには .h を付けない ってダケです。
>> たしかC++では拡張子.hがつくヘッダは使えなくなったはず‥。
>> 違うかな。
>違います。標準C++ライブラリのヘッダには .h を付けない ってダケです。
Cのライブラリ(stdio.hやmath.hなど)は拡張し付きでも使えるのですね。
.hが使えなくなったのは標準C++ライブラリだけでしたか。
> そもそもヒープに Foo のインスタンスを生成する理由が見当たらない。
これは、問題にするために必要だからという理由だと思われます。
> Cのライブラリ(stdio.hやmath.hなど)は拡張し付きでも使えるのですね。
Cのライブラリは頭に'c'を付け.hを取って標準C++ライブラリに組み入れられました。
> .hが使えなくなったのは標準C++ライブラリだけでしたか。
使えなくなったというのには語弊があります。
'名前が変わった'に過ぎません。
だからコンパイルエラーが出たとしても'そんなファイルは見つからない'でしょう。
>> .hが使えなくなったのは標準C++ライブラリだけでしたか。
>使えなくなったというのには語弊があります。
>'名前が変わった'に過ぎません。
すいません。単に標準C++ライブラリは
#include <iostream.h> という記述ができなくなった、
といいたかったのです。言葉が足りないですね。
ああ、僕も言葉が足りなかったみたい。
正しくは ヘッダ名と共に実装自体も心機一転された です。
ここに質問を丸投げするべきではなかったようです。
私はこういった掲示板をはじめて使ってみたので、まず、これだけ
たくさんの方たちの意見が短時間でかえってきていることにびっく
りしました。感謝します。自分でも考えるべきだなとおもい、VCで
ビルドしてみました。ビルドして以下のエラーが出ました。
--------------------構成: test - Win32 Debug--------------------
コンパイル中...
test.cp
D:\Documents and Settings\annex\デスクトップ\test.cpp(8) : warning
C4183: 'Print': メンバ関数定義はコンストラクタ のようですが名前が囲まれたクラスと一
致しません。
D:\Documents and Settings\annex\デスクトップ\test.cpp(8) : error
C2561: 'Print' : 関数が値を戻すように宣言されていますが、関数定義に 'return' ステー
トメントがありません。
D:\Documents and Settings\annex\デスクトップ\test.cpp(21) : warning
C4508: 'main' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
cl.exe の実行エラー
test.exe - エラー 1、警告 2
Print() { printf(%d, i); } → void Print() { printf(%d, i);}
と修正してコンパイルがとおりました。
warning C4508は、
int main() → void main()
としてなくなりました。
--------------------構成: test - Win32 Debug--------------------
コンパイル中...
test.cpp
リンク中...
test.exe - エラー 0、警告 0
これを宿題を出してきている人にメールしました。
すると、以下の回答がありました。
================================================================
すみません。void 抜けは想定外でした。
宿題を出していながら申し訳ありません。
こちらで用意していた回答は以下の通りです。
-------------------------------------------
Foo* foo = new Foo(5);
で Foo のオブジェクトを作成しているが、そのオブジェクトが
解放されず、メモリリークを起こしている。
これを解決するためには、
return;
の直前で、
delete foo;
を入れると良い。
問題の出し方がおかしいと、今回のようにいろんな人が混乱してしまいますので内容が
きちんと伝わるようにしましょう。
例えば、私が
>メモリリークのことではないですか
>newがあるのにdeleteが無い
と回答していますが、
επιστημηさんがコンパイルエラーのことなので答えでは無いとおっしゃっています。
しかし、ねずみさんの回答は、メモリリークのことで私の回答が正解であるようです。
>このソースはJavaとして動かせばちゃんとうごくそうです。
>でも、C++として動かすとコンパイルでエラーになるそうです。」
私は、ねずみさんのこの文章とソースを見てコンパイルエラーのことを無視して回答
しましたが、その他の一生懸命考えてくださった方は大変苦労されたと思います。
皆様、お疲れ様でした。
