2012-08-09 17 views
6

यह मेरे गेम इंजन के लिए मेरे कोड का हिस्सा है जिस पर मैं काम कर रहा हूं। जब मैं कोड बना/डिबग करता हूं, तो यह एक कंपाइलर त्रुटि के साथ बंद हो जाता है: "कैमरा.cpp (70): त्रुटि C2059: वाक्यविन्यास त्रुटि: '=='" और पंक्ति 70सिंटेक्स त्रुटि "=="

if (near == far) लाइन है। यह भी लाइन 75 पर होता है:

(if near == NULL || far == NULL)

bool Camera::SetClippingPlanes(float near, float far) 
{ 
    if (near == far) //Line 70(First Error) 
    { 
     MessageBox(NULL, L"ERROR: The far and near clipping planes cannot be equal!", L"Error", MB_OK | MB_ICONERROR); 
     return false; 
    } 
    else 
    { 
     if (near == NULL || far == NULL) //Line 75(Second Error) 
     { 
      MessageBox(NULL, L"ERROR: Near and/or Far clipping planes are null!", L"Error", MB_OK | MB_ICONERROR); 
      return false; 
     } 
     else 
     { 
      nearPane = near; 
      farPane = far; 
      return true; 
     } 
    } 
} 

मैं अन्य कार्य करता है जो एक ही तरीके से == ऑपरेटर का उपयोग है, लेकिन वे एक त्रुटि प्राप्त नहीं है। धन्यवाद अगर आपके पास कोई सुझाव है ...

+3

'आरक्षित' शब्द नहीं है? – asawyer

+0

@asawyer: नहीं, आप 'के लिए' सोच रहे हैं :) –

+1

@ पीटर एलेक्सेंडर नहीं, मैं दूर पॉइंटर्स के बारे में सोच रहा हूं। – asawyer

उत्तर

17

कई साल पहले (एक आकाशगंगा में दूर, दूर) near और far कीवर्ड थे। ऐसा लगता है कि आपका कंपाइलर अभी भी सोचता है कि वे हैं - शायद यह सहायक होने की कोशिश कर रहा है।

आपको या तो अलग-अलग नाम चुनने की आवश्यकता है, या यह पता लगाएं कि इस विशेष पिछड़े-संगत 'फीचर' को कैसे बंद किया जाए।

+0

जानकारी के लिए धन्यवाद, स्टार युद्ध संदर्भ भी प्यार करता हूँ! +1 – Annabelle

+0

वाह ... मुझे खुशी है कि मैं उसमें भाग नहीं पाया था। मैं वर्षों में यह जांचने के लिए सोचा नहीं था: पी –

+0

हाँ, महान सितारा युद्ध संदर्भ। सहायक उत्तर के लिए बहुत बहुत धन्यवाद। यह असाधारण रूप से काम किया! – Niro56

10

आप विंडो के लिए और खिड़कियों में कोडिंग कर रहे हैं यदि आप windows.h या एक फ़ाइल है कि यह शामिल हैं (और निश्चित रूप से आप इसे में शामिल हैं, क्योंकि आप संदेशबॉक्स के एक फोन है) शामिल हैं तो far और near दोनों windef.h और आप में परिभाषित कर रहे हैं उन्हें परिवर्तनीय नामों के रूप में उपयोग नहीं कर सकते

+0

स्थिति को हल करने के लिए एक सरल '# undef' काम करेगा? – Dai

+0

असल में विंडोज़ 'दूर' और 'नज़दीकी' का उपयोग नहीं करती है, यह संगतता के लिए है, इसलिए आप उन्हें '# undef' का उपयोग करके अनिश्चित कर सकते हैं और हर चीज ठीक रहेगी, लेकिन यह आपके चर का नाम बदलने के लिए बहुत साफ है, क्योंकि यह सच है कि 'कई साल पहले (दूर आकाशगंगा में, दूर और दूर तक कीवर्ड थे ...' – BigBoss

+0

मुझे एक अभियान की याद दिलाई गई है जिसे मैंने पहले विंडोज़ हेडर फाइलों को फिर से लिखना था (http://stackoverflow.com/प्रश्न/6146978/यह-एक-अच्छा-विचार-टू-रीवेट-win32s-headers) है। शायद मुझे इसके साथ आगे बढ़ना चाहिए ... – Dai

3

== के साथ फ्लोट की तुलना करना भी खतरनाक है। पूर्ण परिशुद्धता के साथ हर संख्या का प्रतिनिधित्व करना संभव नहीं है। मेरा मानना ​​है कि मुख्य अर्थात् फ़्लोटिंग कार्यान्वयन केवल 6 महत्वपूर्ण स्थानों के लिए अच्छा है। आपको दो तरीकों या गणना की जाएगी कि एक ही संख्या क्या होनी चाहिए 0.000001 या इससे कम हो और इसलिए बराबर न हो।

+1

लेकिन यह वाक्यविन्यास त्रुटि के बारे में सवाल का जवाब नहीं देता है। – Marlon

+5

@StackUnderflow शायद, लेकिन यह अगली बार जवाब दे सकता है: पी – asawyer

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