BG Development


  Reply to this topicStart new topicStart Poll

> generic arraylist
ivelinqnev
Публикувано на: 07-10-2020, 19:34
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 626
Регистриран на: 02.12.08



Здравейте, опитвам се да създам макрос, с който да имплементирам generic arraylist. Но при компилация получавам леко не ясна за мен грешка(може би зашото не ми се е налагало често да използвам макроси)

array.h files

CODE

#include <stdio.h>
#include <stdlib.h>

#define DEFINE_LL_NODE(T, NAME) \
 typedef struct NAME \
   { \
     T* data; \
     int size; \
     int capacity;  \
   } NAME; \
             \
   NAME* list_create() \
   { \
       NAME* new_list = malloc(sizeof(NAME)); \
       if (new_list == NULL) { \
              return NULL; \
       } \
       new_list->size = 0; \
       new_list->capacity = 20; \
       new_list->data = malloc(sizeof(T) * 20); \
       if (new_list->data == NULL) { \
              free(new_list); \
              return NULL; \
       } \
       return new_list; \
   }


и в сорса
CODE

#include "array.h"


int main()
{
   DEFINE_LL_NODE(int, foo)
   foo* b=  list_create();

}
но при компилация имам следната грешка
QUOTE
Severity Code Description Project File Line Suppression State
Error (active) E0065 expected a ';' template C:\Users\iveli\source\repos\template\template\template.cp 8
Severity Code Description Project File Line Suppression State
Error C2601 'list_create': local function definitions are illegal template C:\Users\iveli\source\repos\template\template\template.cpp 8
Severity Code Description Project File Line Suppression State
Error C2065 'foo': undeclared identifier template C:\Users\iveli\source\repos\template\template\template.cpp 8



Някой идеи, къде греша?

Това мнение е било редактирано от ivelinqnev на 07-10-2020, 19:36
PMEmail Poster
Top
fast_user
Публикувано на: 07-10-2020, 19:51
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 601
Регистриран на: 19.09.12



Замени стойноста на макроса с кода до който трябва да се разшири и ще видиш че се опитваш да дефинираш структурата и функцията в майн-а, което не е позволено(грешката 'list_create': local function definitions are illegal )


--------------------
Linux is only free if your time has no value.
Linux Akbar
Чък Норис не използва Линукс, Линукс използва Чък Норис.
PMEmail Poster
Top
SuN
Публикувано на: 07-10-2020, 20:13
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 11637
Регистриран на: 27.01.05



QUOTE
Замени стойноста на макроса с кода...

И задължително на лист хартия и с моливче за да поправя грешките, нали?* icon_smile.gif

Шегата настрана, за по-дълъг код може да видиш дали твоя компилатор поддържа вариант на опцията "-E" като на gcc, която обработва (замества) всички макроси, но спира дотам компилацията и изкарва кода.

* Съвременните конвенции повеляват да се ползват цветни моливчета за ключови думи и синтаксис. Желаещите да станат майстори може да запишат курс по калиграфия.


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
ivelinqnev
Публикувано на: 07-10-2020, 20:16
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 626
Регистриран на: 02.12.08



QUOTE (fast_user @ 07-10-2020, 19:51)
Замени стойноста на макроса с кода до който трябва да се разшири и ще видиш че се опитваш да дефинираш структурата и функцията в майн-а, което не е позволено(грешката 'list_create': local function definitions are illegal )

Оффф DEFINE_LL_NODE(int, foo) трябва да е извън main-a
PMEmail Poster
Top
akrachev
Публикувано на: 07-10-2020, 21:29
Quote Post



Име: акрачев
Група: Потребител
Ранг: Почетен член

Мнения: 921
Регистриран на: 27.11.09



а защо не използваш STL ?


--------------------
prozrenieto.com Духовни уроци събрани от добри хора
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 08-10-2020, 05:43
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 9468
Регистриран на: 11.11.06



QUOTE (akrachev @ 07-10-2020, 21:29)
а защо не използваш STL ?

тоя въпрос май много пъти му е отговаряно, но някак отговора винаги минава покрай ушите на стл феновете
PM
Top
bvbfan
Публикувано на: 08-10-2020, 07:40
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3934
Регистриран на: 08.12.13



Реба това, че stl на М$ е кенеф не означава да не се ползва. По темата, защо не пишеш на С++ като ползваш разширение cpp, ако не споменеш компилатора се ползва този за С++. Направи си template class.


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
Дон Реба
Публикувано на: 08-10-2020, 07:45
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 9468
Регистриран на: 11.11.06



в предната фирма ползвах колекциите на мфц (масиви, мапове и тн) и определено са много по-добре от стл. въпреки това мисля че и колекциите на мфц за по-дългосрочен план по-добре да не се ползват. тук не е въпроса дали са добре или зле, а че самото им ползване почва да влече проблеми, избягването на които си струва
PM
Top
bvbfan
Публикувано на: 08-10-2020, 09:06
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3934
Регистриран на: 08.12.13



мфц и добро в едно изречение не мога да ползвам.


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0