2016-06-05 8 views
1

Im auf Englisch nicht gut .. sorryKann ich die C++ - Codestruktur sehen?

zum Beispiel

struct structure1 
{ 
    structure2 st; 
} 

struct structure2 
{ 
    structure1 st; 
} 

Es

Wie kann ich diesen Code unvollständigen Typ Fehler ??

Es funktioniert gut in Java ist aber in C++ Ich denke, weil Top-down-Prozess ..

ich es Arbeit gute Lösung frage, hat

Dies ist mein richtiger Code

Es ist Teil der Graph ist Algorithmus

struct Edge 
{ 
    Node destination; 

    int capacity; 

    int cost; 

    Edge dual; 

    Edge(Node n, int c, int s) 
    { 
     capacity = c; 

     cost = s; 

     destination = n; 

     dual.cost = -9999; 
    } 

}; 

struct Node 
{ 
    int cost; 

    vector<Edge> edges; 

    Edge from; 

    string name; 

    bool onq; 

    Node() 
    { 
     from.capacity = -9999; 
    } 

    void clear() 
    { 
     cost = 0; 
     edges.clear(); 
     from.capacity = -9999; 
    } 
}; 

Vielen Dank !!

+0

Wie für Ihre Änderungen. Es ist so ziemlich das gleiche Prinzip, das ich in meiner Antwort gezeigt habe. Sie leiten 'Node' weiter und verwenden einen Zeiger oder eine Referenz dafür in' Edge'. –

+0

Auch 'Edge Dual;' wird nicht funktionieren. Ich habe keine Ahnung von seinem Zweck, aber wenn Sie eine andere 'Edge'-Instanz referenzieren wollen, verwenden Sie wieder einen Zeiger oder eine Referenz. –

+0

Der Grund dafür, dass es in Java funktioniert, ist, dass Sie in Java, wenn Sie eine Variable eines Klassentyps deklarieren, tatsächlich einen Verweis erstellen (der wie ein Zeiger in C++ ist), kein tatsächliches Objekt dieser Klasse . Das eigentliche Objekt wird auf dem Heap erstellt, wenn Sie zum Beispiel 'st = new structure1();' –

Antwort

2

Nein, das geht nicht. Es wäre eine endlose Rekursion.

Sie könnten jedoch eine Referenz oder einen Zeiger verwenden. Siehe here wie dies zu tun:

struct structure2; // <<< forward declaration 
struct structure1 
{ 
    structure2* st; // <<< use a pointer (or reference) 
    structure1(structure2* s2) : st(s2) {} // <<< initialize the pointer 
}; 

struct structure2 
{ 
    structure1 st; 
    structure2() : st(this) {} // <<< pass the pointer 
}; 

Live Demo

+0

Danke, aber ich wundere mich verwechseln diesen Code, die st sind nicht die gleiche Variable Ich überarbeiten meine Frage, um meinen echten Code zu sehen Es funktioniert gut in Java, aber C++ .. Danke! –

+0

@ParkYeoungJun _ "das st sind nicht die gleiche Variable" _ Nun, man ist ein Mitglied von 'structure1' und das andere ist ein Mitglied von' structure2', dass sie den gleichen Namen haben, macht sie nicht irgendwie verwandt. –

+0

Ja, es ist keine Beziehung, dass Variablen, die ich meine Frage überarbeiten kann meinen Code Dank sehen, um Aufmerksamkeit xD zu bekommen –

Verwandte Themen