みなさん、こんにちわ。
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で質問しましょう!
似たような質問が見つかりました
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(開発・運用・管理) バッチファイルで特定のファイル・ディレクトリ以外を削除する方法について 4 2022/05/31 14:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Subversionのリポジトリの削除
-
現在位置より2つ上のディレク...
-
VB.NET 最下位のディレクトリ名...
-
図に示す階層構造で,現在のデ...
-
PHP 画像のアップロードについ...
-
VC++ Win32アプリ ディレクトリ...
-
バッチを用いたフォルダの自動移動
-
fopenでファイルが開かない場合...
-
環境変数をMakefile内で有効に...
-
DLL のロードの順序
-
str ! = NULL
-
【PHP】declare命令で”Fatal er...
-
ファイルアップロードに関して...
-
MkDir関数
-
renameでのPermission deniedエ...
-
includeが出来ない訳とは?
-
filemtimeについて
-
VC#のFtpWebRequestで多階層の...
-
makefile でファイルをコピーす...
-
上位ディレクトリ名(フォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
現在位置より2つ上のディレク...
-
Subversionのリポジトリの削除
-
fopenでファイルが開かない場合...
-
makefile でファイルをコピーす...
-
VB.NET 最下位のディレクトリ名...
-
rmdirでフォルダが消せません
-
visualstudioでc#のdllができない
-
ファイルアップロードに関して...
-
絶対パス?絶対アドレス?意味...
-
MkDir関数
-
拡張子を隠すのは良い事なので...
-
Subversionで、ファイルをリネ...
-
powershell で書いたプログラム...
-
コマンドプロンプトを指定のデ...
-
ファイル選択ダイアログで選択...
-
aspのページが表示できません
-
JAVA内で複数のファイルを削除...
おすすめ情報