簡単なソースです ひとつバグが含まれています – 固定ページ 2 – プログラミング – Home

簡単なソースです ひとつバグが含まれて...
 
通知
すべてクリア

[解決済] 簡単なソースです ひとつバグが含まれています

固定ページ 2 / 2

επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> たしかC++では拡張子.hがつくヘッダは使えなくなったはず‥。
> 違うかな。

違います。標準C++ライブラリのヘッダには .h を付けない ってダケです。


返信引用
PIP
 PIP
(@PIP)
ゲスト
結合: 22年前
投稿: 16
 

>> たしかC++では拡張子.hがつくヘッダは使えなくなったはず‥。
>> 違うかな。
>違います。標準C++ライブラリのヘッダには .h を付けない ってダケです。

Cのライブラリ(stdio.hやmath.hなど)は拡張し付きでも使えるのですね。
.hが使えなくなったのは標準C++ライブラリだけでしたか。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 24年前
投稿: 240
 

> そもそもヒープに Foo のインスタンスを生成する理由が見当たらない。

これは、問題にするために必要だからという理由だと思われます。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> Cのライブラリ(stdio.hやmath.hなど)は拡張し付きでも使えるのですね。

Cのライブラリは頭に'c'を付け.hを取って標準C++ライブラリに組み入れられました。

> .hが使えなくなったのは標準C++ライブラリだけでしたか。

使えなくなったというのには語弊があります。
'名前が変わった'に過ぎません。
だからコンパイルエラーが出たとしても'そんなファイルは見つからない'でしょう。


返信引用
PIP
 PIP
(@PIP)
ゲスト
結合: 22年前
投稿: 16
 

>> .hが使えなくなったのは標準C++ライブラリだけでしたか。
>使えなくなったというのには語弊があります。
>'名前が変わった'に過ぎません。
すいません。単に標準C++ライブラリは
#include <iostream.h> という記述ができなくなった、
といいたかったのです。言葉が足りないですね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

ああ、僕も言葉が足りなかったみたい。
正しくは ヘッダ名と共に実装自体も心機一転された です。


返信引用
ねずみ
 ねずみ
(@ねずみ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

ここに質問を丸投げするべきではなかったようです。
私はこういった掲示板をはじめて使ってみたので、まず、これだけ
たくさんの方たちの意見が短時間でかえってきていることにびっく
りしました。感謝します。自分でも考えるべきだなとおもい、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;

を入れると良い。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

問題の出し方がおかしいと、今回のようにいろんな人が混乱してしまいますので内容が
きちんと伝わるようにしましょう。

例えば、私が

>メモリリークのことではないですか
>newがあるのにdeleteが無い

と回答していますが、

επιστημηさんがコンパイルエラーのことなので答えでは無いとおっしゃっています。

しかし、ねずみさんの回答は、メモリリークのことで私の回答が正解であるようです。

>このソースはJavaとして動かせばちゃんとうごくそうです。
>でも、C++として動かすとコンパイルでエラーになるそうです。」

私は、ねずみさんのこの文章とソースを見てコンパイルエラーのことを無視して回答
しましたが、その他の一生懸命考えてくださった方は大変苦労されたと思います。

皆様、お疲れ様でした。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました