Generics and incompatible types.
I’ve been buggered with an error that has me tearing the little I have left of hair out.
[dcc32 Error] DUnitX_PSDCarrierTypes.pas(75): E2010 Incompatible types: ‘TPSDCarrierType’ and ‘TPSDBase’
The problem is that DUnitX_PSDCarrierTypes.pas only has 73 lines.
Has anyone seen this before? Can you remember what the underlying cause was at the time? Property or method visibility? Missing unit inclusion? Abstract methods?
Let me introduce the classes
In PSDBase,
TPSDBase = class (TLockableObject, ILogInterface)
…
end;
and
TTestBaseClass = class
private
FInstance: T;
function GetInstance: TPSDBase;
protected
property Instance: TPSDBase read GetInstance;
…
end;
In PSDCarrierTypes,
TPSDCarrierType = class(TPSDBase)
…
end;
–
unit DUnitX_PSDBase;
interface
uses
PSDBase, PSDConstants,
DUnitX.TestFramework;
type
/// Basis generic test class for TPSDBase descendants
TTestClass = class(TTestBaseClass)
…
end;
and
[TestFixture]
TestTPSDBase = class(TTestClass)
…
end;
–
unit DUnitX_PSDCarrierTypes;
interface
uses
DUnitX.TestFramework,
PSDConstants, PSDBase, DUnitX_PSDBase, PSDCarrierTypes;
type
[TestFixture]
TestTPSDCarrierType= class(TTestClass)
…
end;
–
The main app looks has the following uses
program DUnitX_PSD_BasicUnitTests;
uses
EMemLeaks,
EResLeaks,
EDialogWinAPIEurekaLogDetailed,
EDialogWinAPIStepsToReproduce,
EDebugExports,
EFixSafeCallException,
EMapWin32,
EAppVCL,
ExceptionLog7,
SysUtils,
DUnitX.AutoDetect.Console,
DUnitX.Loggers.Console,
DUnitX.Loggers.Xml.NUnit,
DUnitX.TestRunner,
DUnitX.TestFramework,
PSDBase in ‘..PSDCommonPSDBase.pas’,
PSDCarrierTypes in ‘..PSDCommonPSDCarrierTypes.pas’,
DUnitX_PSDBase in ‘DUnitX_PSDBase.pas’,
DUnitX_PSDCarrierTypes in ‘DUnitX_PSDCarrierTypes.pas’;
At first, I thought there was something weird about the order of compilation, but no – it looks normal.
14:54:39,1355491 DUnitX.ConsoleWriter.Base.dcu
14:54:39,2945261 DUnitX.Utils.dcu
14:54:39,3847109 DUnitX.IoC.dcu
14:54:39,4146560 DUnitX.Windows.Console.dcu
14:54:39,4222502 DUnitX.AutoDetect.Console.dcu
14:54:39,4371663 DUnitX.Generics.dcu
14:54:39,4582339 DUnitX.Extensibility.dcu
14:54:39,5233700 DUnitX.InternalInterfaces.dcu
14:54:39,5430712 DUnitX.WeakReference.dcu
14:54:39,5612627 DUnitX.Test.dcu
14:54:39,5751848 DUnitX.TestFixture.dcu
14:54:39,6043794 DUnitX.RunResults.dcu
14:54:39,6422193 DUnitX.TestResult.dcu
14:54:39,6714326 DUnitX.FixtureResult.dcu
14:54:39,7038809 DUnitX.Extensibility.PluginManager.dcu
14:54:39,8034689 DUnitX.TestRunner.dcu
14:54:39,8136915 DUnitX.CommandLine.dcu
14:54:39,8669545 DUnitX.MemoryLeakMonitor.Default.dcu
14:54:39,9958192 DUnitX.FixtureProviderPlugin.dcu
14:54:40,1629623 DUnitX.TestFramework.dcu
14:54:40,2033539 DUnitX.Loggers.Console.dcu
14:54:40,2217283 DUnitX.Loggers.Null.dcu
14:54:40,2732231 DUnitX.Loggers.XML.NUnit.dcu
14:54:40,3435106 StringFunctions.dcu
14:54:40,3692211 CustomDebugOut.dcu
14:54:40,3768381 Functions.dcu
14:54:40,7058753 FileFunctions.dcu
14:54:40,7107884 TINEFunctions.dcu
14:54:40,7191973 TineInterfaces.dcu
14:54:40,7319419 PSDConstants.dcu
14:54:40,7487508 TineClasses.dcu
14:54:40,7766713 PSDXMLLog.dcu
14:54:40,7834018 PSDLogEvent.dcu
14:54:40,7919438 PSDLogExceptionManager.dcu
14:54:40,8042575 PSDLogDrivers.dcu
14:54:40,8155411 tiConsts.dcu
14:54:40,8266076 PSDResourcePool.dcu
14:54:40,8517546 PSDConnectivityStatus.dcu
14:54:40,8632446 PSD_Db_Abstract.dcu
14:54:40,8960845 PSD_TCPTelegramBase.dcu
14:54:40,9079624 PSD_TCP_Types.dcu
14:54:40,9199220 PSD_TCPTelegrams.dcu
14:54:41,0200024 PSDBase.dcu
14:54:41,1065126 PSDCarrierTypes.dcu
14:54:41,1135979 DUnitX_PSDBase.dcu
…then the compilation fails for unit DUnitX_PSDCarrierType, 2 lines beyond end of unit.
You must be logged in to post a comment.