前向声明中的名称冲突

时间:2018-09-10 18:49:19

标签: c++ c++11 c++builder forward-declaration

我在标头中声明了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

1 个答案:

答案 0 :(得分:1)

collections中,前向声明应为:

file.hpp

并且可能所有对该类型的引用(至少在头文件中)都应具有 完全限定的名称namespace System { namespace Sysutils { class TMultiReadExclusiveWriteSynchronizer; } }