
みなさん、こんにちわ。
C++の勉強を始めたばっかりの弱小物ではありますが、
INCLUDEの件に関して、
分からないことが発生し、
検索方法が悪いのか?自己解決に至りませんでしたので、
お力をかしていただけると大変ありがたく質問させていただきました。
宜しくお願い致します。
他のディレクトリ下にあるhppファイルを
includeしようと思っていたのですが、
コンパイルすると、
以下のとおりのお叱りをいただいてしまいます。
error: ‘test.hpp’ in namespace ‘dirA’ does not name a type
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
詳細は以下のとおりです。
・ディレクトリ「dirA」の直下に 「test.hpp」 があり、
・ディレクトリ「dirB」の直下に 「go.hpp」 がある。
「go.hpp」の先頭にて、
以下のとおり、
test.hppのインクルードを済ませてはいます。
==========================
[host]#cat go.hpp
#include <dirA/test.hpp>
dirA::test _mark;
==========================
すごく簡単な内容でしたら大変恐縮ではありますが、
周囲にプログラム経験者が皆無な事もあり、
小さな事でも
アドバイスいただけると大変ありがたい次第です。
どうぞ宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
> namespace dirA {
> namespace test {
> class1{};
> class2{};
> class3{};
> } // namespace test
> } // namespace dirA
> dirBの「go.hpp」では、次のようにすれば正解なのですかね?
例えばこんな感じになりますね。
dirA::test::class1 mark1;
dirA::test::class2 mark2;
dirA::test::class3 mark3;
ちなみに、C++のnamespaceはJavaのpackageとは違うので、
ディレクトリ配置を気にする可能性があるのはincludeであって、
namespaceはファイル構成やディレクトリ配置とは無関係です。
特に必要なければディレクトリ名と同じ名前のnamespaceをつける必要はありませんし、
特に必要が無ければディレクトリを別にする必要もありません。
勿論、意図してのものならばいいのですが。
後、もう一点、念のための確認です。
通常、
> ・ディレクトリ「dirA」の直下に 「test.hpp」 があり、
> ・ディレクトリ「dirB」の直下に 「go.hpp」 がある。
> #include <dirA/test.hpp>
この書き方で、test.hppをincludeするためには、
「dirAの上のディレクトリ」に対してinclude用のパスが設定されている必要がありますが
(goo.hppが何処のディレクトリにあるかは基本的に関係ない)、これは大丈夫でしょうか。
一般に、<>で囲んだincludeのパスを有効にするには、
コンパイラへのパラメータ設定(や環境変数)などが必要です。
例えば、xxx/yyy/test.hppにファイルがあるとすると、
#include <test.hpp>と書くならばxxx/yyyが、
#include <yyy/test.hpp>と書くならばxxxが、
設定されている必要があります。
MrBanさん!
再びありがとうございます!
インクルードパスの設定を行うも、
現在は解決には至りませんでしたが、
インクルードの部分に関して、
少しjavaと混同していた部分を改める事ができました。
いただいたアドバイスを参考に、
もう少し、進めてみたいと思います。
No.3
- 回答日時:
ん~,
dirA::test::test
と「test」が 2回出てきてるのはなぜだろう. その形で名前空間を定義するなら
dirA::test::クラス名
のようになるはず. たとえば
namespace dirA {
namespace test {
class class1 {};
...
}
}
なら
dirA::test::class1 hoge;
のように.
この回答への補足
Tacosanさん!
アドバイスありがとうございます。
紛らわしくてすいみませんです。
丁度、class3の部分が、
「class test{};」となっている感じになっていて、
次のように考えてしまいました次第です。
dirA::test::test hoge;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
==========================
[host]#cat test.hpp
namespace dirA {
namespace test {
class1{};
・
class2{};
・
class3{};
} // namespace test
} // namespace dirA
==========================
Tacosanさん
数に制限があるために、
ポイントこそ付与できませんでしたが、
アドバイスいただけまして大変感謝しております。
ありがとうございました。
参考になりました!
No.2
- 回答日時:
もしかして、java のパッケージとC++名前空間を勘違いしてるということは
ありませんか?
C++では dirA というディレクトリに配置しても、test というクラス宣言が
dirA名前空間にあるわけではありません。
dirA名前空間に testクラスを宣言したければ、前述の方が提示された
ように namespace dirA { class test {}; } とする必要があります。
min_isさん!
アドバイスありがとうござます!
min_isさんや皆さんからのご意見を聞き、
namespaceについて理解が深まりました。
確かに、
以前はjavaをやってました。
No.1
- 回答日時:
include自体はできていて、dirA::testが見つからないといわれているのではないですか。
C++のnamespaceは、ヘッダがディレクトリdirAにあろうがdirBにあろうが関係なく、
ディレクトリ名:: とは書きませんが、dirAという名前のnamespaceがtest.hppにありますか?
もし、test.hppのなかで、
namespace dirA { class test {}; }
などと書いてあるならば、
dirA::test mask;
になります。
もし、test.hppのなかで、
namespace Foo { class test {}; }
とあれば、
Foo::test mask;
です。
もしも、単にヘッダファイルをdirAにおいたというだけで、
test.hppのなかは、
class test {};
等であれば、単に
test mask;
で大丈夫です。
この回答への補足
MrBanさん!
優しくご回答いただきましてありがとうございました!
やはり、インクルード自体はうまく出来ているのですね。
質問時に情報が不足していたので、
「test.hpp」に関して付け足しさせていただきます。
「test.hpp」内のnamespaceは以下のとおりになっていますので、
==========================
[host]#cat test.hpp
namespace dirA {
namespace test {
class1{};
・
class2{};
・
class3{};
} // namespace test
} // namespace dirA
==========================
dirBの「go.hpp」では、次のようにすれば正解なのですかね?
度々、恐縮です。
dirA::test::test mark;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
IIS+PHP スクリプトから仮想デ...
-
ハッスルサーバーで海外からWP...
-
visualstudioでc#のdllができない
-
renameでのPermission deniedエ...
-
Subversionのリポジトリの削除
-
ディレクトリの書込権限について
-
rmdirでフォルダが消せません
-
ディストリビューションウィザ...
-
絶対パス?絶対アドレス?意味...
-
指定ディレクトリ名称が先頭か...
-
JAVA内で複数のファイルを削除...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
*.php、*.php3、*.phtmlの違い
-
ImageCreate関数が undefined f...
-
【file_exists】ファイルが存在...
-
ob_end_clean と ob_clean の違...
-
フォームで戻った際に入力済み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
makefile でファイルをコピーす...
-
rmdirでフォルダが消せません
-
現在位置より2つ上のディレク...
-
Subversionで、ファイルをリネ...
-
visualstudioでc#のdllができない
-
絶対パス?絶対アドレス?意味...
-
Visual C++ 2005 Express Editi...
-
DLL のロードの順序
-
コマンドプロンプトを指定のデ...
-
JAVA内で複数のファイルを削除...
-
aspのページが表示できません
-
VB.NET 最下位のディレクトリ名...
-
VB2008でFTPでのディ...
-
ファイルの更新日時でのソート
-
C言語でのディレクトリ作成につ...
-
Matlab 指定したディレクトリ...
おすすめ情報