我从Rad studio官方网站下载了TVersionInfo VCL,并在我的工具箱调色板中显示成功安装到我的IDE中。将它粘贴在我的项目中并尝试第一次构建它。我确信它会构建好,因为我已经运行了它附带的测试项目。没关系。 但是在编译期间我的项目中存在错误。由于使用Fib plus包进行interbase数据库访问连接,所有这一切都发生在我身上。 以下是邮件中出现的错误:
Checking project dependencies...
Compiling Invoice.cbproj (Debug configuration)
[BCC32 Error] VersionInfoUI.h(24): E2015 Ambiguity between 'TVersionInfo' and 'Ib_services::TVersionInfo'
Full parser context
main.cpp(10): #include about.h
about.h(11): #include D:\CB2010_VCL\VersionInfo\VersionInfoUI.h
VersionInfoUI.h(11): class TCustomVersionInfoLabel
[BCC32 Error] VersionInfoUI.h(25): E2015 Ambiguity between 'TVersionInfo' and 'Ib_services::TVersionInfo'
Full parser context
main.cpp(10): #include about.h
about.h(11): #include D:\CB2010_VCL\VersionInfo\VersionInfoUI.h
VersionInfoUI.h(11): class TCustomVersionInfoLabel
[BCC32 Error] VersionInfoUI.h(39): E2015 Ambiguity between 'TVersionInfo' and 'Ib_services::TVersionInfo'
Full parser context
main.cpp(10): #include about.h
about.h(11): #include D:\CB2010_VCL\VersionInfo\VersionInfoUI.h
VersionInfoUI.h(11): class TCustomVersionInfoLabel
[BCC32 Error] about.h(16): E2015 Ambiguity between 'TVersionInfo' and 'Ib_services::TVersionInfo'
Full parser context
main.cpp(10): #include about.h
about.h(13): class TfAbout
Failed
Elapsed time: 00:00:04.0
我认为FIB IB Service类也有相同的类名,因此两个类名之间存在冲突。如何解决这个问题?如何使两个类一起工作,如使用命名空间或其他?
答案 0 :(得分:1)
用于VCL组件的Delphi生成的.hpp文件包含在名称空间中。问题是他们还倾向于在它们底部使用using namespace ...
语句将所有内容转储到全局命名空间中,这完全违背了使用命名空间的目的。如果查看此类.hpp文件的底部,您将看到#ifdef
语句,这些语句显示您可以在项目中定义哪些值来禁用此行为。另一种方法是在设计时不要使用TVersionInfo
。通过new
运算符在运行时代码中动态创建它,然后您可以指定它来自哪个命名空间。