Recent

Author Topic: identifier not found  (Read 3663 times)

mrspock1

  • New Member
  • *
  • Posts: 29
identifier not found
« on: August 02, 2018, 10:04:56 am »
I downloaded
https://github.com/maciej-izak/generics.collections
and put the "src" and "inc" directories in the project=>options=> other unit files
in the "uses" I added "Contnrs" and "Generics.Collections"

I get identifier not found while putting in the code

type
  b=TQueue;
  a= TDictionary;

Handoko

  • Hero Member
  • *****
  • Posts: 3185
  • My goal: build my own game engine using Lazarus
Re: identifier not found
« Reply #1 on: August 02, 2018, 10:23:13 am »
Try this:

01. Start a new project
02. Lazarus main menu > File > Open
03. Browse to the [location]\src
04. Open the file named generics.collections.pas
05. Lazarus main menu > Project > Add Editor File to Project
06. Answer Yes (when asked Add to unit search path?)
07. Goto the tab unit1 (your source code)
08. Type Generics.Collections in the uses clauses
09. It should work now
  :)

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #2 on: August 02, 2018, 10:37:45 am »
There is some progress. Type definitions are OK.

but I get the message
The GDB command:
"-environment-cd "C:/Users/mariu/AppData/Local/Temp/""
returned the error:
",msg="C:/Users/mariu/AppData/Local/Temp/: Permission denied.""

I do not know where to set this to a different directory

Handoko

  • Hero Member
  • *****
  • Posts: 3185
  • My goal: build my own game engine using Lazarus
Re: identifier not found
« Reply #3 on: August 02, 2018, 10:40:14 am »
I use Linux but my guess is you had not save the project. Try to save the project first before running:

Lazarus main menu > File > Save All

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #4 on: August 02, 2018, 10:58:33 am »
I had to start a new project as there were some errors unsolvable. Repeated everything and get the same message "identifier not found" regarding Tqueue and Tdictionary.

Now I do not know at all where I did something wrong.

marcov

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 7497
Re: identifier not found
« Reply #5 on: August 02, 2018, 12:14:13 pm »
type
  b=TQueue;
  a= TDictionary;

This is correct, since it requires specialization TQueue<ATYTPE> or TDICTIONARY<ATYPE>

Make sure you enable delphi mode, so you don't have to learn the old objfpc generics dialect.

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #6 on: August 02, 2018, 02:17:23 pm »
That is correct, I used in the first place
  b=TQueue<byte>;
  a= TDictionary<byte,byte>;

and got ";" expected but "<" found. So removed all within <> and then there was the message identifier not found.

Thaddy

  • Hero Member
  • *****
  • Posts: 9160
Re: identifier not found
« Reply #7 on: August 02, 2018, 02:49:03 pm »
I think you are mixing up mode delphi and mode objfpc.
Mode objfpc (default, als, in Lazarus) has a very different syntax for generics.
also related to equus asinus.

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #8 on: August 02, 2018, 03:03:32 pm »
I have previously set
compiler options=>analysis=>syntax mode=> Delphi (-MDelphi)

marcov

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 7497
Re: identifier not found
« Reply #9 on: August 02, 2018, 03:04:15 pm »
Or it finds the contnrs versions. Remove contnrs from the uses.

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #10 on: August 02, 2018, 03:13:20 pm »
The same problem
type
  b=TQueue<byte>;
  a= TDictionary<byte,byte>;

";" expected but "<" found

mrspock1

  • New Member
  • *
  • Posts: 29
Re: identifier not found
« Reply #11 on: August 02, 2018, 03:47:52 pm »
Ops.. my mistake

So I removed "contnrs" from the uses in Unit1
and put

unit Unit1;

{$MODE DELPHI}{$H+}

and now all works

only I did not expect to have so much trouble