前向声明中的名称冲突
Name conflict in forward declaration
我在 header 中声明了一个 TMultiReadExclusiveWriteSynchronizer
类型的指针。为此,我想使用前向声明
class TMultiReadExclusiveWriteSynchronizer;
因为描述这个class的vcl.h
库已经包含在cpp
文件中。
但是如果我像下面的例子那样做,我会得到一个错误:
ambigious name
因为编译器在我的前向声明和 System::Sysutils::TMultiReadExclusiveWriteSynchronizer
(它是 vcl.h
的一部分)中找到名称 TMultiReadExclusiveWriteSynchronizer
。
没有我的前向声明,编译器告诉我这个类型是未知的。
我不明白,为什么编译器在我不使用前向声明时找不到 TMultiReadExclusiveWriteSynchronizer
class,但如果我使用前向声明,则编译器会发生名称冲突。
它怎么能在System::Sysutils::TMultiReadExclusiveWriteSynchronizer
中找到名字?这不包括在我的 header 中。就像我下面的例子一样,我的 hpp
文件没有包含。
我该如何解决这个问题?
当然,我可以只在我的 header 中包含 System::Sysutils
,或者在我的 cpp
中更改包含的顺序。但是当我只需要一个简单的前向声明时,我不想包含任何东西。
file.hpp
class TMultiReadExclusiveWriteSynchronizer;
....
TMultiReadExclusiveWriteSynchronizer* sync;
file.cpp
#include "file.hpp"
#include <vcl.h>
....
在file.hpp
中,前向声明应该是:
namespace System {
namespace Sysutils {
class TMultiReadExclusiveWriteSynchronizer;
}
}
可能所有对该类型的引用(至少在头文件中)都应该有
完全限定名称 System::Sysutils::TMultiReadExclusiveWriteSynchronizer
。
我在 header 中声明了一个 TMultiReadExclusiveWriteSynchronizer
类型的指针。为此,我想使用前向声明
class TMultiReadExclusiveWriteSynchronizer;
因为描述这个class的vcl.h
库已经包含在cpp
文件中。
但是如果我像下面的例子那样做,我会得到一个错误:
ambigious name
因为编译器在我的前向声明和 System::Sysutils::TMultiReadExclusiveWriteSynchronizer
(它是 vcl.h
的一部分)中找到名称 TMultiReadExclusiveWriteSynchronizer
。
没有我的前向声明,编译器告诉我这个类型是未知的。
我不明白,为什么编译器在我不使用前向声明时找不到 TMultiReadExclusiveWriteSynchronizer
class,但如果我使用前向声明,则编译器会发生名称冲突。
它怎么能在System::Sysutils::TMultiReadExclusiveWriteSynchronizer
中找到名字?这不包括在我的 header 中。就像我下面的例子一样,我的 hpp
文件没有包含。
我该如何解决这个问题?
当然,我可以只在我的 header 中包含 System::Sysutils
,或者在我的 cpp
中更改包含的顺序。但是当我只需要一个简单的前向声明时,我不想包含任何东西。
file.hpp
class TMultiReadExclusiveWriteSynchronizer;
....
TMultiReadExclusiveWriteSynchronizer* sync;
file.cpp
#include "file.hpp"
#include <vcl.h>
....
在file.hpp
中,前向声明应该是:
namespace System {
namespace Sysutils {
class TMultiReadExclusiveWriteSynchronizer;
}
}
可能所有对该类型的引用(至少在头文件中)都应该有
完全限定名称 System::Sysutils::TMultiReadExclusiveWriteSynchronizer
。