2012-11-20 14 views
6

Quindi ho un problema che sono sicuro che sia una soluzione estremamente ovvia, ma non riesco a capirlo. Fondamentalmente, quando provo a creare definizioni di classe nelle intestazioni e l'implementazione nei miei file di origine, ricevo un errore che dice che sto ridefinendo le mie classi. Utilizzo di Visual C++ 2010 Express.Errore di "ridenfinizione del tipo di classe" tra file di intestazione e origine

errore esatto: "Errore C2011: 'nodo': 'classe' di tipo ridefinizione"

codice di esempio riportato qui di seguito:

Node.h:

#ifndef NODE_H 
#define NODE_H 
#include <string> 

class Node{ 
public: 
    Node(); 
    Node* getLC(); 
    Node* getRC(); 
private: 
    Node* leftChild; 
    Node* rightChild; 
}; 

#endif 

Node.cpp:

#include "Node.h" 
#include <string> 

using namespace std; 


class Node{ 
    Node::Node(){ 
     leftChild = NULL; 
     rightChild = NULL; 
    } 

    Node* Node::getLC(){ 
     return leftChild; 
    } 

    Node* Node::getRC(){ 
     return rightChild; 
    } 

} 

risposta

7
class Node{ 
    Node::Node(){ 
     leftChild = NULL; 
     rightChild = NULL; 
    } 

    Node* Node::getLC(){ 
     return leftChild; 
    } 

    Node* Node::getRC(){ 
     return rightChild; 
    } 

} 

si de clare la classe due volte nel tuo codice, la seconda volta nel tuo file .cpp. Per scrivere le funzioni per la classe si dovrebbe fare il seguente

Node::Node() 
{ 
    //... 
} 

void Node::FunctionName(Type Params) 
{ 
    //... 
} 

nessuna classe è richiesta

+0

Ho avuto lo stesso problema della persona che ha posto la domanda. Tuttavia, dove inserisco le mie variabili (che sono private nella classe)? –

2

Stai ridefinire la classe Node, come si sta dicendo. Il file .cpp è solo per l'implementazione delle funzioni.

//node.cpp 
#include <string> 

using namespace std; 

Node::Node() { 
    //defined here 
} 

Node* Node::getLC() { 
    //defined here 
} 

.... 
Problemi correlati