2012-11-20 34 views
6

Vì vậy, tôi đang gặp sự cố mà tôi chắc chắn có một giải pháp cực kỳ rõ ràng, nhưng tôi dường như không thể hiểu được. Về cơ bản, khi tôi cố gắng thực hiện các định nghĩa lớp trong các phần đầu và thực hiện trong các tệp nguồn của mình, tôi nhận được một lỗi nói rằng tôi đang định nghĩa lại các lớp của mình. Sử dụng Visual C++ 2010 Express.Lỗi "Định nghĩa loại lớp" lỗi giữa tiêu đề và các tệp nguồn

lỗi chính xác: "error C2011: 'Node': 'lớp' kiểu định nghĩa lại"

Ví dụ mã bao gồm dưới đây:

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

} 

Trả lời

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

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

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

} 

bạn de clare các lớp hai lần trong mã của bạn, lần thứ hai là trong tập tin .cpp của bạn. Để viết các chức năng cho các lớp học của bạn, bạn sẽ làm như sau

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

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

không có lớp học là cần thiết

+0

Tôi gặp vấn đề tương tự như người đã đặt câu hỏi. Tuy nhiên, tôi đặt các biến của tôi ở đâu (trong lớp học riêng tư)? –

2

Bạn đang xác định lại lớp Node, vì nó đang nói. Tệp .cpp chỉ dành cho việc triển khai các hàm.

//node.cpp 
#include <string> 

using namespace std; 

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

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

.... 
Các vấn đề liên quan