मैं सी से सी ++ में एक टूल को कन्वर्ट करने का प्रयास कर रहा हूं, इसलिए मैं सीएलआर के रूप में संकलित कर सकता हूं। मैं एक .NET लड़का हूं इसलिए यह मेरे आराम क्षेत्र से बाहर है।सी से सी ++, अनुवाद में खो गया
मैं निम्न पंक्ति (मुझे बताओ अगर यह पर्याप्त जानकारी नहीं है) पर एक संकलन त्रुटि है:
if (qvartype[ currQ ] == FLOATING)
*range *= get_scale(currQ); /* Make range units match */
/* data units. */
currQ
एक short
है। त्रुटि get_scale
फ़ंक्शन पर परिभाषित की गई है। इस समारोह परिभाषित किया गया है पहले के रूप में:
#define get_scale(i) ((short)pow(10, (int)((long)(cat_names[ i ]))))
... जो मेरे लिए हास्यास्पद लग रहा है, में गहरी प्रकार कास्टिंग नरक, लेकिन यह सी में संकलित करता है हालांकि, सी ++ में, मैं निम्न त्रुटि संदेश मिलता है:
Error 374 error C2668: 'pow' : ambiguous call to overloaded function
मुझे समझ में आता है कि सी ओवरलोड की अवधारणा को नियोजित नहीं करता है, लेकिन सी ++ करता है, और इस गर्म गड़बड़ी पर परिवर्तनीय हस्ताक्षर यह स्पष्ट नहीं करता है कि कौन सा काम करने के लिए कार्य करता है।
मैं इसे कैसे ठीक करूं? C++ के साथ अधिकतम संगतता के लिए इसे लिखने का सही तरीका क्या होगा? अगर आप की तरह
#define get_scale(i) ((short)pow(10.0, (double)cat_names[ i ])))
लेकिन यह है कि एक मैक्रो उपयोग कर रहा है कुछ फोन किए गए
माइनर ध्यान दें, 'get_scale' एक समारोह है, यह एक मैक्रो है नहीं होना चाहिए: समर्थित बुला सम्मेलनों में से एक
(double, int)
इतना करने के लिए अपने कॉल को संशोधित करने के लिए है। – Borgleaderओवरलोड का सेट अलग-अलग हो सकता है कि आप 'या' # शामिल करें 'या दोनों, चाहे आप नेमस्पेस std का उपयोग कर रहे हों;' (अनुशंसित नहीं) और टूलचेन पर भी निर्भर करता है। यह वास्तव में बहुत बदसूरत है। करने के लिए सबसे आसान बात यह है कि प्रकार सी 'पाउ()' फ़ंक्शन से मेल खाते हैं, इसलिए सी फ़ंक्शन हमेशा चुना जाता है। –
यदि आपकी 10 शक्तियां हैं जिन्हें आपको एक पूर्णांक में फिट करने की आवश्यकता है (और ऐसा लगता है कि आप यही कर रहे हैं), तो यह 'पाउ' को कॉल करने के बजाय स्थिर लुकअप टेबल का उपयोग करने के लिए तेज़ हो सकता है।मैं वैसे भी ऐसा करूंगा, क्योंकि 'पाउ' के कुछ कार्यान्वयन हैं जिनमें मामूली गोल त्रुटियां हैं, भले ही आप पूर्णांक का उपयोग कर रहे हों। – PaulMcKenzie