+added still more error descriptions

This commit is contained in:
michael 1998-04-14 14:18:47 +00:00
parent 730fdb8c77
commit f04ae640e8

View File

@ -2365,6 +2365,8 @@ raise exceptions in an \var{except} block.
\item [ Syntax error while parsing a conditional compiling expression ]
\item [ Evaluating a conditional compiling expression ]
There is an error in the expression following the \var{\{\$if \}} compiler
directive.
\item [ Keyword redefined as macro has no effect ]
You cannot redefine Pascal keywords with macros. If you, for instance would
want to redefine the exit command you'd get this error.
@ -2380,11 +2382,35 @@ The compiler expects a floating point expression, and gets something else.
When compiling in \var{\{\$V+ \}} mode, the string you pass as a parameter
should be of the exact same type as the declared parameter of the procedure.
\item [ Only class methods can be referred with class references ]
This error occurs in a situation like the following:
\begin{verbatim}
Type :
Tclass = Class of Tobject;
Var C : TClass;
begin
...
C.free
\end{verbatim}
\var{Free} is not a class method and hence cannot be called with a class
reference.
\item [ Only class methods can be accessed in class methods ]
This is related to the previous error. You cannot call a method of an object
from a inside a class method. The following code would produce this error:
\begin{verbatim}
class procedure tobject.x;
begin
free
\end{verbatim}
Because free is a normal method of a class it cannot be called from a class
method.
\item [ Constant and CASE types do not match ]
One of the labels is not of the same type as the case variable.
\item [ The symbol can't be exported from a library ]
You're trying to export something which cannot be exported.
You can only export procedures and functions when you write a library. You
cannot export variables or constants.
\item [ A virtual method must be overridden using the OVERRIDE directive: ]
A method that is declared \var{virtual} in a parent class, should be
overridden in the descendent class with the \var{override} directive. If you
@ -2396,7 +2422,15 @@ exist.
\item [ No member is provided to access property ]
You specified no \var{read} directive for a property.
\item [ Illegal symbol for property access ]
There is an error in the \var{read} directive for a property.
There is an error in the \var{read} or \var{write} directives for an array
property. When you declare an array property, you can only access it with
procedures and functions. The following code woud cause such an error.
\begin{verbatim}
tmyobject = class
i : integer;
property x [i : integer]: integer read I write i;
\end{verbatim}
\item [ Cannot write a protected field of an object ]
Fields that are declared in a \var{protected} section of an object or class
declaration cannot be accessed outside that objects methods.
@ -2423,10 +2457,21 @@ value.
\item [ Use of unsupported feature! ]
You're trying to force the compiler into doing something it cannot do yet.
\item [ absolute can only be associated to ONE variable ]
You cannot specify more than one variable after the \var{absolute} directive.
You cannot specify more than one variable before the \var{absolute} directive.
Thus, the following construct will provide this error:
\begin{verbatim}
Var Z : Longint;
X,Y : Longint absolute Z;
\end{verbatim}
\item [ absolute can only be associated a var or const ]
You can only specify a \var{absolute} directive after a variable or constant
declaration.
The address of a \var{absolute} directive can only point to a variable or
constant. Therefore, the following code will produce this error:
\begin{verbatim}
Procedure X;
var p : longint absolute x;
\end{verbatim}
\item [ succ or pred on enums with assignments not possible ]
When you declared an enumeration type which has assignments in it, as in C,
like in the following:
@ -2464,7 +2509,17 @@ You declared a class, but you didn't implement it.
You specify a field of a record or object, and the record or object doesn't
contains such a field.
\item [ The use of a far pointer isn't allowed there ]
Free Pascal doesn't support far pointers, so you cannot take the address of
an expression which has a far reference as a result. The \var{mem} construct
has a far reference as a result, so the following code will produce this
error:
\begin{verbatim}
var p : pointer;
...
p:=@mem[a000:000];
\end{verbatim}
\item [ procedure call with stackframe ESP/SP ]
A procedure doesn't need a complete stack-frame, so it is omitted.
\item [ Abstract methods can't be called directly ]
You cannot call an abstract method directy, instead you must call a
overriding child method, because an abstract method isn't implemented.