2011-08-15 16 views
5

ठीक है, मैं गूगल-सेंसेई का उपयोग करने और इस वेबसाइट पर चारों ओर खोज की कोशिश की है, और मैं इस त्रुटि के बारे में कई पदों मिल गया है, जबकि , मुझे कोई भी ऐसा नहीं मिला है जिसने enums को संबोधित किया है। इसके अलावा, सभी लोगों को मैंने देखा है या तो किसी दूसरे के लिए एक प्रकार असाइन करने की कोशिश की गई है, 'नए', आदि के अनुचित उपयोग जहाँ तक मेरा बता सकते हैं, कि नहीं इस उदाहरण में मामला है।रूपांतरण

जैसा कि शीर्षक में बताया गया है, मुझे प्रोग्राम को संकलित करने का प्रयास करते समय conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested त्रुटि मिल रही है, मैं g ++ का उपयोग करने पर काम कर रहा हूं।

मैं एक वर्ग KanjiCard नामित ने इसे सार्वजनिक रूप से परिभाषित enum है कि है:

enum KanjiCardType { 
    KANJI_CARD = 1, 
    KEYWORD_CARD = 2 
}; 

वर्ग के लिए निर्माता के रूप में निम्नानुसार परिभाषित किया गया है:

KanjiCard(char *cardText, int cardTextLength, int cardWidth, int cardHeight, 
     int cardX, int cardY, KanjiCardType cardType, SDL_Color textColor); 

(मैं चार उपयोग कर रहा हूँ * बजाय std :: string का कारण है क्योंकि पुस्तकालयों के साथ काम करना आसान है। मैं

मैं इसे नए कार्ड बनाने के लिए बुला रहा हूं (यह वह जगह है जहां त्रुटि आती है):

KanjiCard currentCard = new KanjiCard(kanji_line, strlen(kanji_line), 
    CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor); 

cardType इस तरह के रूप में परिभाषित किया जाता है: KanjiCard::KanjiCardType cardType = KanjiCard::KANJI_CARD;

मैं मूल रूप से सिर्फ KanjiCard::KANJI_CARD जहां cardType अभी कि निर्माता कॉल में शामिल है में गुजर कोशिश की, लेकिन मुझे लगता है कि त्रुटि मिली, तो मैं सब कुछ कोशिश कर रहा है मैं कर सकता कोशिश करते हैं और यह काम करने के लिए प्राप्त करने के लिए, *cardType और &cardType के निर्माता में cardType पैरामीटर स्विचन की कोशिश कर रहा है और कॉल में cardType के प्रकार के साथ चारों ओर खिलवाड़ साथ ही कोई लाभ नहीं हुआ, सहित के बारे में सोच।

जहाँ तक मैं कह सकता हूं, cardType एक सूचक नहीं है, इसलिए मैं वास्तव में यह नहीं समझ सकता कि मुझे यह संदेश क्यों मिल रहा है। किसी भी मदद की सराहना की जाएगी, क्योंकि मैं अपने बुद्धिमानी के अंत में यह पता लगाने की कोशिश कर रहा हूं।

संपादित करें: मैं भी मैं भी कक्षा से बाहर enum खींच (और KanjiCard:: प्रस्तावना को हटाने, निश्चित रूप से) की कोशिश की, और अब भी वही समस्या हुई कि उल्लेख करना चाहिए।

उत्तर

5

यह cardType यही समस्या है नहीं है; यह currentCard है। आपने यह लिखा:

KanjiCard currentCard = new KanjiCard(... 

यह एक गैर-सूचक प्रकार के लिए सूचक को असाइन कर रहा है। आप इस का मतलब हो सकता है:

KanjiCard *currentCard = new KanjiCard(... 

... या तो आप इस का मतलब हो सकता है:

KanjiCard currentCard(... 

मेरे सुझाव के पूर्व ढेर पर एक KanjiCard आवंटित करेगा। currentCardKanjiCard पर इंगित करेगा। उत्तरार्द्ध इसे ढेर पर आवंटित करेगा। यह एक KanjiCard है।

पूर्व आप मैन्युअल रूप से delete करना होगा। उत्तरार्द्ध को delete डी होने की आवश्यकता नहीं है; यह उस दायरे के भीतर मान्य है जिसे घोषित किया गया है और एक बार यह दायरे से बाहर हो जाने पर, यह अमान्य है।

पूर्व आप -> का उपयोग करने वाले सदस्यों तक पहुंच सकते हैं। उत्तरार्द्ध आप . का उपयोग करने वाले सदस्यों तक पहुंच सकते हैं।

+0

(** facepalms और हंसते हुए कहते हैं **) हां। शायद यह होगा। एक्सडी मेरे लिए यह पकड़ने के लिए धन्यवाद। जब मैं थक गया हूं तो वह कोड को सिखाएगा। ;) – Kanmuri

2

KanjiCard currentCard = KanjiCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor 
    ); 

या

KanjiCard currentCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor 
    ); 

पहले प्रतिलिपि प्रारंभ कहा जाता है, और दूसरा प्रत्यक्ष प्रारंभ कहा जाता है।

ध्यान दें कि यहां कोई new नहीं है।

चीयर्स & hth।,

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