在项目中移动文件,现在我找不到命名空间

Posted

技术标签:

【中文标题】在项目中移动文件,现在我找不到命名空间【英文标题】:Moved files in project and now I can't find namespaces 【发布时间】:2019-01-17 18:10:43 【问题描述】:

我以前将所有源文件都放在同一个文件夹中,但我已经厌倦了这种混乱,所以我创建了一个文件夹层次结构并在这些文件夹中组织了我的标题和 .cpp 文件,并更改了 @项目 .vcxproj 文件中的 987654324@ 标记相应地。然后我更改了源标题中的所有#include 行以匹配标题的新位置。

现在,当我编译时,我收到一堆错误,说找不到命名空间“math”。命名空间可以在文件组织之前找到,所以问题应该是这样的,但是#includes 工作正常。

如果我写

using namespace

自动完成功能可以很好地找到命名空间,并且文本界面中不会出现红色的摆动线。

我正在使用 VS17 社区。​​p>

【问题讨论】:

这通常是由于滥用“使用命名空间”而发生的。如果新的 C++ 开发人员完全忘记了 C++ 中存在这一点,并且总是使用完全限定的命名空间引用,他们会帮自己一个忙。这将避免难以追踪的编译失败和这种性质的错误。因此,不幸的是,没有minimal reproducible example,没有人可以帮助您,因为问题是您尝试编译的实际代码所特有的。 我只在 main 方法中使用了“使用命名空间”。我只是把它作为额外的信息。我在所有不是主要方法的地方都写了“math::...”。 再说一次,如果没有minimal reproducible example,就无法为您提供帮助。您认为您的代码包含的内容的一般描述并不是真正的minimal reproducible example。 【参考方案1】:

实际上有两种方法可以解决您的问题。您已经注意到第一个,您始终可以使用相对路径(相对于源文件)。

#include "..\Math\math.h"

这会很好用。您可以修改您的 C++ 项目属性以添加包含目录的列表。当您开始处理使用大量库的项目时,这对您非常有用 要添加包含目录,您需要:

    在解决方案资源管理器中右键单击您的项目,然后选择属性。 在左侧窗格中,单击 C/C++ > 常规 选项卡。 在显示 Additional Include Directories 的属性上,单击下拉箭头(您可能需要先单击文本内部)并选择 Edit...

从这里,您可以添加将用于项目的包含目录列表。您可以使用:

绝对路径

C:\Path\to\Math

相对路径(相对于您的 .vcxproj 文件)

..\..\relative\path\to\Math

宏(Visual Studio 将列出您可用的宏)

($SolutionDir)..\path\to\Math

当涉及到 C++ 和其他 Visual Studio 项目时,您会看到很多宏的使用,不仅用于包含目录,还用于构建事件。

一旦您添加了包含目录的列表,您就可以像往常一样在源代码中包含您的标头:

#include "math.h"

如果您需要使用包含文件夹之一的相对路径,您也可以这样做。

// some directory inside of Math
#include "MoreMath\moremath.h"
// some directory above Math
#include "..\AboveMath\abovemath.h"

希望这会有所帮助!

【讨论】:

【参考方案2】:

我解决了...

如有必要,请删除此问题。问题是我没有回溯#include "math.h" 中的文件路径。他们应该说#include "..\Math\math.h"

【讨论】:

我相信你可以删除自己的问题。您可能需要先删除您的答案。

以上是关于在项目中移动文件,现在我找不到命名空间的主要内容,如果未能解决你的问题,请参考以下文章

命名空间内的 JetBrains Rider 导入引用

我在Tomcat部署项目,报500错误,说命名空间找不到,我运行正常的项目呀

在命名空间中找不到 System.Text.Json.JsonReaderException

到 PHP 命名空间或不到 PHP 命名空间 [关闭]

在命名空间内设计

Symfony2 - 在链配置的命名空间中找不到类“X”