我是编程新手,尤其是我渴望学习的C ++,尽管在我研究的所有教科书或外部链接中,我似乎无法找到它。
在这里。
如果我有两个班级(A班和B班)
A类有一个名称空间A_NS; B类有一个命名空间B_NS;
这两个类都位于外部文件夹中
A类 - > fileA.h(FolderA) B类 - > fileB.h(FolderB)
我的问题是:
在A班,我怎样才能#include<B_NS/fileB.h>
我想通过一种通用接口引用我的fileB.h?是我在这里使用的命名空间吗?
我不想使用文件夹名称,例如<folderB/fileB.h>
因为实际上文件夹是几个目录。
我只是不知道如何包含它,我想知道命名空间是否可以这样做因为我在不同的目录中有许多文件我希望在一个常见类型的名称下耦合,如果这有任何意义^^
对不起,这是我在Stackoverflow上的第一篇文章,我发现很难清楚地说明我的问题,但如果有人能提供一些帮助,我会非常感激。
答案 0 :(得分:4)
我不想使用文件夹名称
这是特定于编译器的,这可能是您的教科书没有涵盖它的原因,但所有编译器都有一些方法可以将目录放在包含路径上。使用GCC,您可以使用-I
选项:
g++ module.cpp -I../headers
命名空间与模块/标头的文件路径完全分开。
答案 1 :(得分:1)
类没有命名空间,但包含在命名空间中。
包含在命名空间中的类对#include
指令没有影响,以包含包含该类的头文件。
编译器具有开关,允许您在#include
指令中查找文件时指定要搜索的文件夹。
例如:
C:\ folderA \ ClassA.h
C:\ FolderB中\ ClassB.h
#include <ClassA.h>
#include <ClassB.h>
int main()
{
return 0;
}
编译器-I
对编译器很常见:
cl.exe main.cpp -I C:\folderA -I C:\folderB
答案 2 :(得分:0)
指定一个额外的include目录(即告诉编译器在哪里查找包含文件,除了它已经在哪里)取决于你正在使用的编译器:
<强> GCC 强>:
g++ -I/path/to/include file.cpp
CL(Visual Studio的编译器):
cl file.cpp -I C:/path/to/include
您还可以在Visual Studio中的特定项目的选项中设置此选项。
答案 3 :(得分:0)
我想有关#include "file.h"
和#include <file.h>
差异的一些背景信息也可能有用。
如果您定义#include "file.h"
,它将开始查看同一目录,然后是您的包含路径,而#include <file.h>
搜索包含路径。
包含路径是通过@larsmans指出的编译器特定方式添加的,但如果您将项目的根添加到包含路径,则可能对您不利。
我将所有标头文件保存在单独的包含文件夹include\project\file.h
中,然后我只添加include
到我的包含路径。然后我按#include <project\file.h>
包含我的头文件,这点是在这种情况下project
目录将充当头文件的命名空间。它会更清楚 - 如果你跨项目混合和匹配头文件(你必须这样做) - 哪个头文件属于哪里,你不会冒混合可能共享相同文件名的头文件的风险。