【发布时间】:2019-02-15 05:47:56
【问题描述】:
我在标题中声明了一个TMultiReadExclusiveWriteSynchronizer 类型的指针。为此,我想使用前向声明
class TMultiReadExclusiveWriteSynchronizer;
因为描述此类的vcl.h 库已经包含在cpp 文件中。
但是如果我像下面的例子那样做,我会得到一个错误:
模糊的名字
因为编译器在我的前向声明和System::Sysutils::TMultiReadExclusiveWriteSynchronizer(这是vcl.h 的一部分)中找到了名称TMultiReadExclusiveWriteSynchronizer。
如果没有我的前向声明,编译器会告诉我这种类型是未知的。
我不明白,为什么当我不使用前向声明时编译器找不到TMultiReadExclusiveWriteSynchronizer 类,但如果我使用一个,那么编译器就会出现名称冲突。
它怎么能在System::Sysutils::TMultiReadExclusiveWriteSynchronizer 中找到名字呢?这不包含在我的标题中。就像在下面的示例中一样,我的 hpp 文件没有包含。
我该如何解决这个问题?
当然,我可以在我的标题中包含System::Sysutils,或者更改我的cpp 中包含的顺序。但是我不想包含一些东西,我只需要一个简单的前向声明。
文件.hpp
class TMultiReadExclusiveWriteSynchronizer;
....
TMultiReadExclusiveWriteSynchronizer* sync;
文件.cpp
#include "file.hpp"
#include <vcl.h>
....
【问题讨论】:
-
需要在同一个命名空间中转发声明。
-
感谢您的帮助。对不起,但我不明白你的意思。你能用这个例子给我解释一下吗?
-
我看不到,我如何在不同的命名空间中。
-
仅供参考,
TMREWSynctypedef 可用于TMultiReadExclusiveWriteSynchronizer -
"它怎么能在
System::Sysutils::TMultiReadExclusiveWriteSynchronizer中找到名字?这不包含在我的标题中。就像在下面的示例中,我的 hpp 文件没有包含" -因为编译器不是在编译 HPP 文件本身,而是在编译 CPP 文件。所以它首先包含你的HPP并解析它,然后它包含vcl.h并解析它,其中包括System.SysUtils.hpp(以及其他)。
标签: c++ c++11 c++builder forward-declaration