J'ai rencontré plusieurs fois cette erreur "Types incompatibles" dans le commentaire ci-dessous, et je n'ai jamais été satisfait de la raison pour laquelle cela n'est pas directement supporté dans Delphi 2007:Delphi: tableau de Char et TCharArray "Types Incompatibles"
program Project1; {$APPTYPE CONSOLE}
type TCharArray = array of Char;
procedure DoArray(Chars: array of Char);
begin
end;
function ReturnTCharArray: TCharArray;
var CharArray: TCharArray;
begin
Result := CharArray;
end;
begin
DoArray(ReturnTCharArray); // [DCC Error] Project1.dpr(18): E2010 Incompatible types: 'Array' and 'TCharArray'
end.
Ne devrait-il pas être possible de rendre un type de tableau "aliasé" à un autre type de tableau compatible les uns avec les autres? En supposant que je ne puisse pas changer la déclaration de DoArray (elle fait partie d'une bibliothèque tierce), comment écrire une fonction retournant un tableau de caractères compatible avec le param de DoArray? La simple "fonction ReturnAChar: array of Char;" aboutit à une erreur "Identifier expected but 'ARRAY' trouvé". J'ai même essayé de changer la fonction retournant le tableau à une procédure avec un var "array of Char", mais cela ne permet pas non plus de régler la longueur du param "array of Char" dans la procédure ("L'objet Constant ne peut pas être passé comme paramètre var ").
+1; droite! (Oh BTW: il y a aussi la chose "tableau ouvert" par opposition à "tableau typé", c'est probablement là que l'Anagoge va se cogner) –
DoArray fait partie d'une bibliothèque tierce que je ne veux pas (et de façon réaliste ne peut pas) éditer.Je peux vous comprendre parfois vouloir le type de sécurité des types par nom, mais cette restriction de la langue est plus ennuyante que utile, pour moi. N'y a-t-il pas un moyen de convaincre Delphi de retourner un "tableau de char" littéral/exact d'une fonction? Cela semble être une requête assez basique. – Anagoge
@Anagoge: Non, il n'y a pas autant que je sache. Je pense que c'est pourquoi ils ont ajouté 'TArray' dans Delphi 2009. 'TArray ' est défini comme 'array of T', mais comme c'est maintenant un type nommé, il contourne tous ces problèmes. –