Когда я создаю простой проект в C++ Builder и добавляю компонент From из моего пакета — 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 ошибок не возникает.
Я использую Embarcadero® RAD Studio 12 версии 29.0.53982.0329
Я пока не могу создать минимальный проект для воспроизведения ошибки, поскольку пакет EhLib содержит довольно много файлов и код.
Я нашел следующий оператор using namespace в файле EhLib.VCL.Hpp. Но я не могу его удалить, поскольку этот файл автоматически создается системой на основе файла pas. .
Файл EhLib.VCL.hpp
...
extern DELPHI_PACKAGE System::Types::TPoint __fastcall SafeGetMouseCursorPos(void);
extern DELPHI_PACKAGE System::UnicodeString __fastcall GetEhLibGUISysInfoAsString(void);
extern DELPHI_PACKAGE System::UnicodeString __fastcall GetEhLibFullSysInfoAsString(void);
} /* 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
#pragma pack(pop)
#pragma option pop
#pragma delphiheader end.
Я вообще не использую пространство имен в своем коде. Все операторы использования пространства имен находятся в автоматически создаваемых файлах hpp, которые не рекомендуется изменять.
Я не могу добавить весь исходный файл, поскольку stackoverflow ограничивает текст 30 000 символов, поэтому я Я добавляю только те части, которые кажутся важными.
Файл Unit1.cpp. Файл, который я могу редактировать.
//---------------------------------------------------------------------------
#include
#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)
{
//
}
//---------------------------------------------------------------------------
Файл Vcl.Buttons.hpp. Я не могу редактировать этот файл. Это часть базовой библиотеки VCL.
// CodeGear C++Builder
// Copyright (c) 1995, 2024 by Embarcadero Technologies, Inc.
// All rights reserved
// (DO NOT EDIT: machine generated header) 'Vcl.Buttons.pas' rev: 36.00 (Windows)
#ifndef Vcl_ButtonsHPP
#define Vcl_ButtonsHPP
#pragma delphiheader begin
#pragma option push
#if defined(__BORLANDC__) && !defined(__clang__)
#pragma option -w- // All warnings off
#pragma option -Vx // Zero-length empty class member
#endif
#pragma pack(push,8)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//-- user supplied -----------------------------------------------------------
#ifndef _WIN64
#pragma link "dwmapi.lib"
#endif //_WIN64
...
};
//-- var, const, procedure ---------------------------------------------------
extern DELPHI_PACKAGE void __fastcall (*FNavigatorEnableChanged)(TBaseNavigator* Self);
extern DELPHI_PACKAGE Winapi::Windows::TRect __fastcall DrawButtonFace(Vcl::Graphics::TCanvas* Canvas, const Winapi::Windows::TRect &Client, int BevelWidth, TButtonStyle Style, bool IsRounded, bool IsDown, bool IsFocused);
} /* 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
#pragma pack(pop)
#pragma option pop
#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif // Vcl_ButtonsHPP
Файл EhLib.VCL.hpp. Я не могу редактировать этот файл. Он генерируется автоматически.
// CodeGear C++Builder
// Copyright (c) 1995, 2024 by Embarcadero Technologies, Inc.
// All rights reserved
// (DO NOT EDIT: machine generated header) 'EhLib.VCL.pas' rev: 36.00 (Windows)
#ifndef EhLib_VCLHPP
#define EhLib_VCLHPP
#pragma delphiheader begin
#pragma option push
#if defined(__BORLANDC__) && !defined(__clang__)
#pragma option -w- // All warnings off
#pragma option -Vx // Zero-length empty class member
#endif
#pragma pack(push,8)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//-- user supplied -----------------------------------------------------------
namespace Ehlib
{
namespace Vcl
{
//-- forward type declarations -----------------------------------------------
class DELPHICLASS TWinControlEh;
class DELPHICLASS TCustomControlEh;
struct TDrawTextOptionsEh;
class DELPHICLASS TFilerAccess;
class DELPHICLASS TMemoryStreamEh;
//-- type declarations -------------------------------------------------------
typedef Data::Db::TBookmark TUniBookmarkEh;
...
extern DELPHI_PACKAGE System::Variant __fastcall RefObjectToVariant(System::TObject* ARefObject);
extern DELPHI_PACKAGE System::TObject* __fastcall VariantToRefObject(const System::Variant &VarValue);
extern DELPHI_PACKAGE System::Types::TPoint __fastcall SafeGetMouseCursorPos(void);
extern DELPHI_PACKAGE System::UnicodeString __fastcall GetEhLibGUISysInfoAsString(void);
extern DELPHI_PACKAGE System::UnicodeString __fastcall GetEhLibFullSysInfoAsString(void);
} /* 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
#pragma pack(pop)
#pragma option pop
#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif // EhLib_VCLHPP
Подробнее здесь: https://stackoverflow.com/questions/793 ... kup-is-vcl
Ошибка компоновщика C++. Vcl.Buttons.hpp(44): кандидат, найденный при поиске по имени, — «Vcl». ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Android Studio зависает при навигации/поиске использования/поиске файлов Java
Anonymous » » в форуме Android - 0 Ответы
- 144 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Группа реагирования-native-radio-buttons с меткой под (и по центру) переключателя
Anonymous » » в форуме Html - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-