Linking fails with "undefined symbol" on a non-overloaded variant of an overloaded procedure is in the implementation section.
Original Reporter info from Mantis: chebmaster
-
Reporter name:
Original Reporter info from Mantis: chebmaster
- Reporter name:
Description:
A long time ago I commented the ansi versions of this procedure out
interface (where Utf16String = UnicodeString):
// Procedure AddLog(S: AnsiString); OVERLOAD;
Procedure AddLog(U: Utf16String); OVERLOAD;
Procedure AddLog(mID: TMotherMessageId); OVERLOAD;
// Procedure AddLog(S: AnsiString; Param: array of const); OVERLOAD;
Procedure AddLog(U: Utf16String; Param: array of const); OVERLOAD;
Procedure AddLog(mID: TMotherMessageId; Param: array of const); OVERLOAD;
But I forgot to comment it out in the implementation section where it does not have "overload"
Procedure AddLog(S: RawByteString; Param: array of const);
begin
AddLog(Utf8Decode(S), Param);
end;
Previous compiler versions built the exe succesfully (up to 3.3.1) but when I tried using 3.2.0-rc1 I got:
(9015) Linking ......\chentrah.exe
chentrah.lpr(112,3) Error: Undefined symbol: CL_CGE_::=::_ADDLOGRAWBYTESTRING
array_of_const
chentrah.lpr(112,3) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
I don't know if such declaration is an error from the language standpoint (it probably is) but the 3.2 candidate #1 does not signal "You mixed overloaded and non-overloaded, you absent-minded fool!" properly :)
P.S. The "product version" dropdown doesn't have "3.2.0-rc1" yet!
Mantis conversion info:
- Mantis ID: 36850
- Build: 3.2.0-rc1
- Platform: Win32