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

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

これはどういうからくりでしょうか?
795
(2): デフォルトの名無しさん [] 2018/06/02(土) 18:30:00 ID:YEAzW6Zk(2/8) AAS
>>793
793(1): デフォルトの名無しさん [sage] 2018/06/02(土) 18:23:14 ID:tlq/OxaF(1) AAS
ヘッダファイルの中じゃなくostreamを使っている翻訳単位(cppファイル)の中で最低1回include iostreamされてればOK

ありがとうございました。

↓のファイルをビルドするとエラーが出るのですが、何が原因かよく分かりません。
フレンド関数関連だと思います。フレンド関数については全く知らないので、真似して
作っただけです。

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

Vec.cpp
外部リンク:codepad.org
796: デフォルトの名無しさん [sage] 2018/06/02(土) 18:30:45 ID:YEAzW6Zk(3/8) AAS
>>794
794(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/02(土) 18:25:58 ID:LSJtd55X(1/3) AAS
>>792
他のヘッダファイルで include してて間接的に読み込んでいることになってるってのが、一番ありそうかなぁ。

ありがとうございました。

もしかしてヘッダーファイルのみをビルドしてもオブジェクトファイルはできないんですか?
797: デフォルトの名無しさん [sage] 2018/06/02(土) 18:34:39 ID:YEAzW6Zk(4/8) AAS
>>795

ある本に書いてあるコードでは、 Vec.h と Vec.cpp のようには分かれていないため、
自分で分けたのですが、エラーになってしまいました。
799
(1): デフォルトの名無しさん [sage] 2018/06/02(土) 18:50:06 ID:YEAzW6Zk(5/8) AAS
>>798
798(1): デフォルトの名無しさん [] 2018/06/02(土) 18:46:23 ID:RQ4rJlvL(1) AAS
定義があればヘッダだけでもオブジェクトファイルに実装はできますよ。

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

上のVec.hの最初の方の

#include <iostream>
#include <cassert>

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

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

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

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

と書いてあります。

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

クラステンプレートについても宣言と実装をヘッダファイルとソースファイルに分離して
書くことはできず、すべてヘッダファイルで実装する必要がありますか?
804: デフォルトの名無しさん [sage] 2018/06/02(土) 19:21:25 ID:YEAzW6Zk(7/8) AAS
>>802
802(1): デフォルトの名無しさん [sage] 2018/06/02(土) 19:00:59 ID:uqsytqRM(1) AAS
>>795
このへんの問題かな?
外部リンク:ja.wikibooks.org

ありがとうございました。

ちょっと理解できないと思うので、あきらめて

外部リンク:codepad.org

としたところビルドできました。

ありがとうございました。
805: デフォルトの名無しさん [sage] 2018/06/02(土) 19:22:03 ID:YEAzW6Zk(8/8) AAS
>>803
803(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/06/02(土) 19:06:46 ID:LSJtd55X(3/3) AAS
>>801
Yes。 テンプレートはヘッダファイルに書く必要がある。
同じ実体 (テンプレート引数も同じなテンプレート) はリンク時に統合されるので、
最終的な実行ファイルに複数の実体があったりはしない。

ありがとうございました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.051s