2010-10-18 23 views
5

मेरे पास एक कार्य प्रोजेक्ट था। कुछ कोड को पुन: व्यवस्थित करने के बाद, मैंने अपनी परियोजना को दोबारा बनाने की कोशिश की और फिर अजीब चीजें हो रही थीं। कंपाइलर के आउटपुट से इस अंश को देखें। मैं MinGW G ++ का उपयोग कर विंडोज़ पर एक्लिप्स से संकलित कर रहा हूं।त्रुटि: '...' किसी प्रकार का नाम नहीं है

**** Build of configuration Debug for project Pract2 **** 

**** Internal Builder is used for build    **** 
g++ -O0 -g3 -Wall -c -fmessage-length=0 -omove.o ..\move.cpp 
In file included from ..\/game.h:11:0, 
       from ..\/piece.h:10, 
       from ..\/move.h:10, 
       from ..\move.cpp:7: 
..\/board.h:18:2: error: 'Piece' does not name a type 

board.h, रेखा 18:

Piece* GetPieceAt(int row, int col) const; 

आमतौर पर जब ऐसा होता है, मैं तो बस कुछ समावेशन मुझे क्या करना भूल गए हैं जोड़ने के लिए। लेकिन मैंने वास्तव में टुकड़ा.hबोर्ड.h के शीर्ष पर शामिल किया है।

मेरा दूसरा विचार यह था कि कंपाइलर ने Piece कक्षा में कहीं भी त्रुटि उत्पन्न करनी होगी जो संकलक वर्ग के अस्तित्व को अनदेखा कर देगा, जिससे बदले में और त्रुटियां पैदा होंगी। उस स्थिति में मैं पहली कंपाइलर त्रुटि को देखता हूं, जो मुझे उम्मीद है कि piece.cpp या piece.h में किसी त्रुटि के बारे में कुछ होगा। लेकिन पहली त्रुटि Piece पर नहीं है, इसलिए मैंने देखा कि ग्रहण ने piece.cpp या piece.h में कोई त्रुटि चिह्नित की है। नहीं, दृष्टि में एक लाल रेखा नहीं है। मैंने केवल कुछ these unexplained yellow markers देखा।

एक आखिरी चीज जिसे मैंने चेक किया था वह था कि प्रत्येक शीर्षलेख फ़ाइल में समावेशन गार्ड शामिल थे, जो उन्होंने किया था।

मैं इस त्रुटि के नीचे कैसे पहुंचूं? मैं कोड स्निपेट पोस्ट करूंगा, लेकिन फिर मैं पूरे कोड को चिपकाऊंगा (जो मैं नहीं कर सकता) क्योंकि अतिरिक्त संदर्भ आवश्यक हो सकता है।

संपादित: यहाँ board.h है ऊपर 18. लाइन (मैं एक बड़ी टिप्पणी, बताते हैं कि क्यों कोड के इस ब्लॉक से छोटी आपकी अपेक्षा से कम है बाहर छोड़ दिया गया है।)

#ifndef BOARD_H_ 
#define BOARD_H_ 
#include "piece.h" 

class Board { 
public: 
    // Prototypes for externally defined functions 
    Board(); 
    ~Board(); 
    void PrintBoard(); 
    Piece* GetPieceAt(int row, int col) const; 
+0

कम से कम 1 के लिए शीर्षलेख पोस्ट करें। एंड्रॉइड द्वारा नीचे दिए गए उत्तर –

उत्तर

14

"आपके कोड को पुनर्व्यवस्थित करने" की सबसे अधिक संभावना है कि आपने board.h और piece.h के बीच एक गोलाकार समावेशन बनाया है। आपकी हेडर फाइलों में ऐसे गार्ड शामिल हैं जो ऐसे मामलों में अनंत समावेशन को रोकते हैं, लेकिन यह संकलन को संकलित करने में सहायता नहीं करेगा।

परिपत्र समावेशन के लिए जांचें और तदनुसार आपको समावेशी रणनीति पर पुनर्विचार करें। यदि आपके पास प्रकारों के बीच कोई परिपत्र निर्भरता नहीं है, तो आप परिपत्र समावेशन को आसानी से खत्म करने में सक्षम होना चाहिए। यदि आपके पास प्रकारों के बीच परिपत्र निर्भरता है, तो आपको कुछ प्रकार के लिए आगे की घोषणाओं का सहारा लेना होगा। सर्कुलर फैशन में हेडर फाइलों को शामिल करने का प्रयास कुछ भी हासिल नहीं करेगा।

+0

+ 1 - यद्यपि 'कक्षा टुकड़ा' '' '.h.h में इस पंक्ति के ऊपर 'इसे ठीक कर सकता है। –

+1

हाँ, आप कुछ पर हैं! 'बोर्ड' में 'टुकड़ा' शामिल है, जिसमें 'गेम' शामिल है, जिसमें 'बोर्ड' शामिल है और यह असीम रूप से चलता है। – Pieter

1

ऐसा लगता है कि piece.h और board.h एक दूसरे द्वारा शामिल हैं। यदि यह मामला दोनों वर्गों के पूर्ववर्तन का उपयोग करने का प्रयास करता है और केवल सीपीपी फाइलों में हेडर शामिल करता है

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