You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder引入EhLib组件编译报错:'Vcl'引用歧义

C++ Builder添加EhLib组件时出现Vcl命名空间歧义编译错误

在Embarcadero® RAD Studio 12(版本29.0.53982.0329)环境下,使用C++ Builder创建简单项目并将EhLib包组件添加到窗体时,触发如下编译错误:

[bcc32c Error] Vcl.Buttons.hpp(66): reference to 'Vcl' is ambiguous
  Vcl.Buttons.hpp(44): candidate found by name lookup is 'Vcl'
  EhLib.VCL.hpp(48): candidate found by name lookup is 'Ehlib::Vcl'
  • Delphi环境下创建同类项目无此问题
  • 因EhLib包文件繁多,暂无法制作最小复现项目

问题分析

自动生成的EhLib.VCL.hpp文件包含using namespace语句,但该文件由系统基于pas文件生成,不建议修改;本人编写的Unit1.cpp代码未使用任何using namespace语句。

关键代码片段

EhLib.VCL.hpp命名空间声明

...
}   /* namespace Vcl */
}   /* namespace Ehlib */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_EHLIB_VCL)
using namespace Ehlib::Vcl;
#endif
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_EHLIB)
using namespace Ehlib;
#endif
...

Vcl.Buttons.hpp命名空间声明

...
}   /* namespace Buttons */
}   /* namespace Vcl */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_VCL_BUTTONS)
using namespace Vcl::Buttons;
#endif
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_VCL)
using namespace Vcl;
#endif
...

可编辑代码Unit1.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MemTableDataEh"
#pragma link "MemTableEh"
#pragma link "DBAxisGridsEh"
#pragma link "DBGridEh"
#pragma link "DBGridEhGrouping"
#pragma link "DBGridEhToolCtrls"
#pragma link "DynVarsEh"
#pragma link "EhLib.VCL"
#pragma link "GridsEh"
#pragma link "ToolCtrlsEh"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------

内容的提问来源于stack exchange,提问作者DmitryB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:02:31