gpt4 book ai didi

c++ - 在没有包含的情况下找不到其他命名空间中的对象,否则文件相同

转载 作者:行者123 更新时间:2023-11-28 07:54:23 24 4
gpt4 key购买 nike

我有两个功能相同的头文件,其中一个会无缘无故地产生错误。我一定是在创建新的(损坏的)文件时做错了什么,但我不知道是什么。

我的 IDE 是 Xcode。该项目是使用 Apple LLVM Compiler 4.1 为 Objective C++ 编译的,但是有问题的代码部分都是纯 C++,没有 Objective C。

这是一些代码:

命名空间A.Common.h

#include "../NamespaceB/Common.h"

#include "WorkingClass.h"
#include "BrokenClass.h"

...

../NamespaceB/Common.h

#ifndef NamespaceBCommon
#define NamespaceBCommon

namespace NamespaceB
{
...
}

...
#include "Superclass.h"
...

工作类.h

#ifndef NamespaceA_WorkingClass
#define NamespaceA_WorkingClass

namespace NamespaceA
{
class WorkingClass : public NamespaceB::Superclass
{
public:

WorkingClass();
~WorkingClass();
};
}

#endif

splinter 类.h

#ifndef NamespaceA_BrokenClass
#define NamespaceA_BrokenClass

// If I don't have this line I get errors. Why?? !!!!!
// This file is exactly identical to WorkingClass.h
// as far as I can tell!
//#include NamespaceA.Common.h

namespace NamespaceA
{
// Parse Issue: Expected class name !!!!!
// Semantic Issue: Use of undeclared identifier 'NamespaceB'
class BrokenClass : public NamespaceB::Superclass
{
public:

BrokenClass();
~BrokenClass();
};
}

#endif

谢谢。

最佳答案

您需要包含所有包含您在代码中引用的命名空间和类的文件。因此,因为您在 BrokenClass.h 中引用了 NamespaceB::Superclass,所以您需要确保包含声明它的文件。在这种情况下,包含 NamespaceA.Common.h(希望如此)可以解决此问题,因为它包含包含 NamespaceB 的文件。

至于为什么您不必在 WorkingClass.h 中包含 NamespaceA.Common.h,我怀疑是因为您恰好有 ../NamespaceB/Common。 h 包含在其他地方。

关于c++ - 在没有包含的情况下找不到其他命名空间中的对象,否则文件相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com