mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-10 21:49:14 +02:00
+added still more error descriptions
This commit is contained in:
parent
730fdb8c77
commit
f04ae640e8
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user