绕过两个班级之间的歧义

时间:2012-08-25 17:14:40

标签: c++ c++builder c++builder-2010

我从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类也有相同的类名,因此两个类名之间存在冲突。如何解决这个问题?如何使两个类一起工作,如使用命名空间或其他?

1 个答案:

答案 0 :(得分:1)

用于VCL组件的Delphi生成的.hpp文件包含在名称空间中。问题是他们还倾向于在它们底部使用using namespace ...语句将所有内容转储到全局命名空间中,这完全违背了使用命名空间的目的。如果查看此类.hpp文件的底部,您将看到#ifdef语句,这些语句显示您可以在项目中定义哪些值来禁用此行为。另一种方法是在设计时不要使用TVersionInfo。通过new运算符在运行时代码中动态创建它,然后您可以指定它来自哪个命名空间。