我正在编写一个组件,这是包含最重要代码段的主类:
uses
Equation;
type
TEquationSolver = class(TComponent)
private
FSolver: TSolverType;
published
property RootFindAlgorithm: TSolverType read FSolver write FSolver;
end;
在使用条款中,我添加了Equation
,因为在Equation.pas
内我声明了这种枚举:
type
TSolverType = (TNewtonRaphson = 0, TSecant, TBisection, TBrent);
通过这种方式,我可以在IDE中使用下拉菜单在Object Inspector中选择一个选项。
我已经安装了组件,在测试时我发现了这个问题:
procedure TForm1.Button1Click(Sender: TObject);
begin
EquationSolver1.RootFindAlgorithm := TSolverType.Secant;
end;
错误如下:
[dcc32错误] Unit1.pas(29):E2003未声明的标识符: 'TSolverType'
我的问题很简单:为什么?
在我运行测试的单元(简单的VCL表单)中,包含其用途的组件,因此我能够“看到”TEquationSolver
。正如你可以在TEquationSolver单元的顶部看到的那样,我已经包含了Equation
而后者有了TSolverType。
情况如下:
我是否必须在某处uses
下添加一些内容?我不想将内容添加到Unit1的uses
。
答案 0 :(得分:4)
如果您想让TSolverType
对单位(例如表格)可见,您必须告诉该单位TSolverType
的定义。这是Delphi如何运作的一部分。
因此,您必须:
在您希望我们定义的单位的Equation
条款中包含uses
(例如表格的单位)
在您的组件的单元中包含TSolverType
隐藏属性(例如,将其设为private
或protected
)。
Delphi不支持您希望的暗示定义。