2012-03-04 13 views
5
सी ++ के साथ

"तर्क सूची से मेल खाता है", मुझे लगता है मैं वर्ग के लिए #include और नाम स्थान जानकारी (के साथ कोड देstd :: पॉव "अतिभारित समारोह के एक से अधिक उदाहरण"

#define TINY std::pow(10,-10) 

की कोशिश करो। ज) जहां छोटे परिभाषित किया गया है

#pragma once 
#include "MMath.h" 
#include <string> 
#include <cmath> 
#include <vector> 

using namespace std; 

#define TINY std::pow(10,-10) 

मैं .cpp फ़ाइल में कुछ समारोह कार्यान्वयन में छोटे का उपयोग करें, और छोटे त्रुटि

देता है IntelliSense: ओवरलोडेड फ़ंक्शन "std :: pow" के एक से अधिक उदाहरण तर्क सूची से मेल खाते हैं

सही वाक्यविन्यास क्या है?

+4

सवाल शीर्षक की तरह एक निरंतर चर को परिभाषित करने और pow समारोह का उपयोग किए बिना यह प्रारंभ करने में, बहुत भ्रामक है, क्योंकि यह पूरी तरह से कुछ भी नहीं पूर्वप्रक्रमक से कोई लेना देना नहीं है। 1e-10 लिखने के बजाय, आप पाउ का उपयोग क्यों कर रहे हैं? – PlasmaHH

+0

स्पष्ट रूप से फ्लोट/डबल ओवरलोड का चयन करने के लिए std :: pow (10.0, 10.0) आज़माएं। प्लाज़्मा एचएच के लिए –

+6

+1: 'कॉन्स्ट डबल टिनी = 1 ई -10' का उपयोग करना; अब तक का सबसे अच्छा और सबसे सी ++ समाधान है। –

उत्तर

10

संपादित करें: मैं टिप्पणीकर्ताओं कह रही है कि एक शाब्दिक निरंतर के स्थान पर std :: पॉव() का उपयोग कर अनावश्यक है से सहमत हैं - तो इस विशेष समस्या के लिए, 1.0E-10 निरंतर साथ जाना; आपके द्वारा प्राप्त वास्तविक त्रुटि की व्याख्या और इसे हल करने का तरीका अभी भी खड़ा है।

इसका आपके #define से कोई लेना देना नहीं है। std::pow() एक ओवरलोडेड फ़ंक्शन है, और इसके ओवरलोड में से कोई भी (int, int) तर्क के रूप में नहीं लेता है। आपको उन प्रकारों के साथ तर्क प्रदान करना चाहिए जो अनजाने में ओवरलोड का चयन करते हैं। वापसी मान आप चाहते हैं के प्रकार पर निर्भर करता है, तो आप शायद इन भार के किसी एक का चयन करना चाहते हैं:

 float pow (  float base,  float exponent); 
    double pow (  double base,   int exponent); 
long double pow (long double base,   int exponent); 

जो आप इस प्रकार आह्वान कर सकते हैं:

std::pow(10.0f, -10.0f) 
std::pow(10.0, -10) 
std::pow(10.0L, -10) 

क्रमशः।

1

इसके बजाय std::pow(10.0,-10.0) का उपयोग करने का प्रयास करें: std::pow में आपके तर्क सूची से मेल खाने वाले overloads हैं; निर्दिष्ट करने 10.0,-10.0 विशिष्ट अधिभार के उपयोग बलों:

double pow(double base, double exponent); 

नोट इस #defineTINY के उपयोग पर निर्भर करने से इनकी हो सकता है कि: हर बार जब आप इसे अपने कोड में उपयोग करते हैं, एक फोन std::pow लिए गणना करने के लिए प्रयास किए जाएंगे एक ही मूल्य एक स्थिर दृष्टिकोण एक स्थिर चर का उपयोग करना होगा, इसे एक बार सेट करें, और उस बिंदु से इसका उपयोग करें।

2

मुझे लगता है कि सबसे अच्छा तरीका यह

const double TINY = 1E-10; //1e-10 is 10 to the power of -10 
संबंधित मुद्दे