Missa inte! Fyndchans i Månadens Drop
Permalänk
Medlem

C++ Typedef error

Hejsan får detta error när jag försöker köra typedef.

Error 1 error C2146: syntax error : missing ';' before identifier 'datatyp' g:\dating\dating\twolist.h 7 dating

typedef struct
{
char namn[30];
itabtyp itab;
} persontyp;

typedef struct
{
persontyp person;
int is_pair;
persontyp par_pojke;
} dingtyp;

typedef dingtyp datatyp; /* Exempelvis */

Skoluppgift, ska använda en färdig fil twolist som hanterar allt med dubbellänkade listor. Men när jag försöker använda min struct som datatyp vill det inte fungera. Tar jag int som var standard så fungerar det.

Permalänk
Medlem

klistrade in din kod i ett c++ console project och det gick igenom, gick också att skapa en array med 10 element av datatyp dynamiskt. Men jag kanske inte fattade ditt problem?

Säkert att du har de includes som behövs till din "list" fil?

Permalänk
Medlem

Satt och pillade lite nu efter du sa att det funkade, och efter ca 7st nya projekt så kom jag förbi det problemet, men vidare till nästa.

typedef struct twolink
{
enum {head, link} kind;
struct twolink *befo, *next;
datatyp data;
} headtyp, linktyp;

void newhead(headtyp **hpp)
/* Skapar en ny tom lista */
{
*hpp = malloc(sizeof(headtyp));

(*hpp)->kind = head;
(*hpp)->befo = (*hpp)->next = *hpp;
}

Det är första funktionen i twolist.cpp och fastnar redan där, säger:
cannot convert from 'void *' to 'headtyp *'
'head' : undeclared identifier

Permalänk
Medlem

blir d inte kind.head då?
komemr inte ihåg riktigt, använde c# senast

Permalänk
Medlem

Nej, sätter ju kind till head så. Blir tokig på skiten, allt borde fungera då jag fått det färdigt från skolan, men inte för mig.

Permalänk
Medlem

Okey, men du har din enum i structen, det är inget jag brukar ha och vet ej om man får?

tex det här fungerar:

enum{head, bulle}kind; int _tmain(int argc, _TCHAR* argv[]){ int k; k=head; return 0; }

Permalänk
Medlem

eller så här:

enum kind{head, bulle}; int _tmain(int argc, _TCHAR* argv[]){ kind k; k=head; return 0; }

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Dalton Sleeper
Okey, men du har din enum i structen, det är inget jag brukar ha och vet ej om man får?

Jo, om det är C++ så är det inga problem, för då är struct nästan samma sak som class. Det enda som skiljer är att struct har sina medlemmar public som standard, medan class har dem som private.

Men okley, är det verkligen C++ du använder? Du har än så länge bara visat C-kod nämligen. typedef struct är en typiskt C-konstruktion som sällan används i C++, och samma gäller malloc. Om det är C du använder så har jag ingen riktig koll på vad som gäller för enums i structs.

Om det är C++ så gäller i alla fall följande:

// Definiera en struct med namn foo struct foo { // Detta definierar en enum med namn bar enum bar { HEAD, TAIL }; // foo har en bar som heter b bar b; // Detta definierar en instans av en anonym enum som kallas bar2 enum { HEAD2, TAIL2 } bar2; }; int main() { // Skapa en instans av foo som heter f foo f; // Sätt b till HEAD f.b = foo::HEAD; // Sätt bar2 till TAIL2 f.bar2 = foo::HEAD2; }