2012-11-20 11 views
6

इसलिए मुझे कोई समस्या है जो मुझे यकीन है कि इसके लिए एक बेहद स्पष्ट समाधान है, लेकिन मुझे लगता है कि यह इसे समझ में नहीं आता है। असल में, जब मैं अपने शीर्षकों में कक्षा परिभाषाओं और मेरी स्रोत फ़ाइलों में कार्यान्वयन करने का प्रयास करता हूं, तो मुझे यह कहते हुए एक त्रुटि मिल रही है कि मैं अपनी कक्षाओं को फिर से परिभाषित कर रहा हूं। विजुअल सी ++ 2010 एक्सप्रेस का उपयोग करना।शीर्षलेख और स्रोत फ़ाइलों के बीच "कक्षा प्रकार पुनर्वितरण" त्रुटि

सटीक त्रुटि: "त्रुटि C2011: 'नोड': 'वर्ग' प्रकार परिभाषा"

उदाहरण कोड नीचे शामिल:

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; 
    } 

} 

उत्तर

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

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

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

} 
आप

डे क्लास को अपने कोड में दो बार क्लेयर करें, दूसरी बार आपकी .cpp फ़ाइल में है। आदेश कार्यों अपनी कक्षा के लिए आप क्या करेंगे लिखने के लिए निम्नलिखित

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

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

कोई वर्ग

+0

मुझे प्रश्न पूछने वाले व्यक्ति के समान समस्या थी। हालांकि, मैं अपने चर (जहां कक्षा में निजी हैं) कहां डालूं? –

2

आप नोड वर्ग को पुनर्परिभाषित कर रहे हैं की आवश्यकता है, के रूप में यह कह रहा है। .cpp फ़ाइल केवल कार्यों के कार्यान्वयन के लिए है।

//node.cpp 
#include <string> 

using namespace std; 

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

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

.... 
संबंधित मुद्दे