我在标头中声明了as
类型的指针。为此,我要使用前向声明
as
因为描述该类的TMultiReadExclusiveWriteSynchronizer
库已经包含在class TMultiReadExclusiveWriteSynchronizer;
文件中。
但是,如果像下面的示例那样执行此操作,则会收到错误消息:
模棱两可的名字
因为编译器会在我的前向声明和vcl.h
(属于cpp
的一部分)中找到名称TMultiReadExclusiveWriteSynchronizer
。
没有我的前向声明,编译器告诉我这种类型是未知的。
我不明白,为什么当我不使用前向声明时编译器找不到System::Sysutils::TMultiReadExclusiveWriteSynchronizer
类,但是如果我使用一个,则编译器会发生名称冲突。
如何甚至在vcl.h
中找到名字?这不包括在我的标题中。就像下面的示例一样,我的TMultiReadExclusiveWriteSynchronizer
文件没有包含文件。
如何解决此问题?
当然,我可以在标题中包含System::Sysutils::TMultiReadExclusiveWriteSynchronizer
,或在hpp
中更改包含的顺序。但是当我只需要一个简单的前向声明时,我就不想包含任何内容。
file.hpp
System::Sysutils
file.cpp
cpp
答案 0 :(得分:1)
在collections
中,前向声明应为:
file.hpp
并且可能所有对该类型的引用(至少在头文件中)都应具有
完全限定的名称namespace System {
namespace Sysutils {
class TMultiReadExclusiveWriteSynchronizer;
}
}
。