Avatar billede tax Nybegynder
18. januar 2005 - 15:17 Der er 5 kommentarer

To strukturer der indeholder pointere af hinandens typer?

Jeg har to strukturer, der hver indeholder en pointer af den andens type.

Jeg kan ikke compile dette. -> Hvad gør man i denne situation?
Avatar billede jpk Nybegynder
18. januar 2005 - 15:24 #1
Det havde hjulpet hvis du havde skrevet hvilken fejl du fik...

Måske er det fordi du skal forerklære den "anden" type

class B;

class A
{
  B* pB;
};
Avatar billede tax Nybegynder
18. januar 2005 - 15:54 #2
Koden ser således ud:

#################################################
fil1: edge.h
#################################################

#ifndef EDGE_H
#define EDGE_H

#include "vertice.h"

struct Vertice;

typedef struct strEdge
{
    Vertice*        pA;
    Vertice*        pB;
    unsigned char  distance;
}Edge;

int edgeAdd(int a, int b);

#endif

#################################################
fil2: vertice.h
#################################################

#ifndef VERTICE_H
#define VERTICE_H

#include "edge.h"

typedef struct Edge;

typedef struct strPoint
{
    int x;
    int y;
}Point;

typedef struct strVertice
{
    Point  pos;  /* vertice position relative to top left of tilemap */
    Edge*    edges[4];
}Vertice;

int verticeAdd(int a, int b);

#endif


Jeg har kun inkluderet h filerne da c filerne kun implementerer en "dummy" funktion.


Begge inkluderes i main.c

Output fra make all er følgende:

#make
gcc -g main.c edge.o vertice.o
In file included from vertice.h:4,
                from main.c:4:
edge.h:10: parse error before `Vertice'
edge.h:10: warning: no semicolon at end of struct or union
edge.h:11: warning: data definition has no type or storage class
edge.h:13: parse error before `}'
edge.h:13: warning: data definition has no type or storage class
In file included from main.c:4:
vertice.h:6: warning: useless keyword or type name in empty declaration
vertice.h:17: parse error before `Edge'
vertice.h:17: warning: no semicolon at end of struct or union
vertice.h:18: warning: data definition has no type or storage class
gmake: *** [myprogram] Error 1
Avatar billede bertelbrander Novice
18. januar 2005 - 19:48 #3
Det letteste er at give "struct xxx" og xxx samme navn:
#ifndef EDGE_H
#define EDGE_H

struct Vertice;

typedef struct Edge
{
    Vertice*        pA;
    Vertice*        pB;
    unsigned char  distance;
}Edge;

int edgeAdd(int a, int b);

#endif

#ifndef VERTICE_H
#define VERTICE_H

struct Edge;

typedef struct Point
{
    int x;
    int y;
}Point;

typedef struct Vertice
{
    Point  pos;  /* vertice position relative to top left of tilemap */
    Edge*    edges[4];
}Vertice;

int verticeAdd(int a, int b);

#endif


Ellers bliver det til:
#ifndef EDGE_H
#define EDGE_H

struct strVertice;

typedef struct strEdge
{
    strVertice*        pA;
    strVertice*        pB;
    unsigned char  distance;
}Edge;

int edgeAdd(int a, int b);

#endif

#ifndef VERTICE_H
#define VERTICE_H

struct strEdge;

typedef struct strPoint
{
    int x;
    int y;
}Point;

typedef struct strVertice
{
    Point  pos;  /* vertice position relative to top left of tilemap */
    Edge*    edges[4];
}Vertice;

int verticeAdd(int a, int b);

#endif
Avatar billede tax Nybegynder
19. januar 2005 - 09:03 #4
Jeg skrev struct foran veriabelnavnet inde i strukturene. Så virker

det

=)
Avatar billede tax Nybegynder
19. januar 2005 - 09:04 #5
Hvem skal ha points?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester