[過去ログ] 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
794
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/02(土) 18:25:58 ID:LSJtd55X(1/3) AAS
>>792
792(1): デフォルトの名無しさん [] 2018/06/02(土) 18:09:00 ID:YEAzW6Zk(1/8) AAS
ヘッダーファイルについて質問なのです。
ヘッダーファイル内で、 ostream というのを使っているのですが、
#include <iostream>をヘッダーファイル内に記述していません。
エラーが出るだろうと思いつつ、ビルドしてみたらエラーが出ませんでした。

これはどういうからくりでしょうか?
他のヘッダファイルで include してて間接的に読み込んでいることになってるってのが、一番ありそうかなぁ。
800
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/02(土) 18:55:56 ID:LSJtd55X(2/3) AAS
>>799
799(1): デフォルトの名無しさん [sage] 2018/06/02(土) 18:50:06 ID:YEAzW6Zk(5/8) AAS
>>798

Vec.h
外部リンク:codepad.org

上のVec.hの最初の方の

#include <iostream>
#include <cassert>

削除してもビルドエラーが出ません。
プロジェクトにはVec.hしかない状態でビルドしました。
テンプレートのエラーはテンプレートが実体化するときに出ると思うよ。
だから、テンプレートを使ってないなら、エラーがあってもコンパイル自体は出来たりする。
803
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/02(土) 19:06:46 ID:LSJtd55X(3/3) AAS
>>801
801(1): デフォルトの名無しさん [sage] 2018/06/02(土) 19:00:50 ID:YEAzW6Zk(6/8) AAS
>>800
ありがとうございました。

あともう一つ質問なのですが、ロベールの本に、

「関数を実体化するには呼び出したところからその実装が見える必要があります。」

「つまり、関数テンプレートは宣言と実装をヘッダファイルとソースファイルに分離して
書くことはできず、すべてヘッダファイルで実装する必要があるのです。」

と書いてあります。

クラステンプレートについては同様の記述がないのですが、

クラステンプレートについても宣言と実装をヘッダファイルとソースファイルに分離して
書くことはできず、すべてヘッダファイルで実装する必要がありますか?
Yes。 テンプレートはヘッダファイルに書く必要がある。
同じ実体 (テンプレート引数も同じなテンプレート) はリンク時に統合されるので、
最終的な実行ファイルに複数の実体があったりはしない。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.168s*