2010-10-21 16 views
10

मैं किसी भी समस्या के बिना math.h के साथ काम करता था। अब, मैं एक बाहरी पुस्तकालय का उपयोग करता हूं जिसमें स्वयं math.h नामक फ़ाइल है, लेकिन इसमें < cmath> शामिल है।cmath.h और संकलन त्रुटियों

C: \ Program Files \ Microsoft Visual Studio 8 \ कुलपति

अपने प्रोजेक्ट को यह पुस्तकालय जोड़ना (या बस निर्देशिका में शामिल जोड़ने, कोड को बिना छुए) अब < cmath> से त्रुटियों की टन उत्पन्न करता है \ \ cmath (18): त्रुटि C2039: 'acosf': 'वैश्विक नामस्थान' का सदस्य नहीं है

सी: \ प्रोग्राम फ़ाइलें \ Microsoft Visual Studio 8 \ VC \ \ cmath (18) शामिल हैं: त्रुटि C2873: 'acosf': प्रतीक का उपयोग किसी उपयोग-घोषणा में नहीं किया जा सकता है

सी: \ प्रोग्राम फ़ाइलें \ Micr ओएसओफ्ट विजुअल स्टूडियो 8 \ वीसी \ \ cmath (18) शामिल है: त्रुटि C2039: 'asinf': 'वैश्विक नामस्थान' का सदस्य नहीं है

सी: \ प्रोग्राम फ़ाइलें \ Microsoft Visual Studio 8 \ VC \ शामिल \ cmath (18): त्रुटि C2873: 'asinf': प्रतीक एक का उपयोग कर-घोषणा

में उपयोग नहीं किया जा सकता है [आदि, आदि ...]

मुझे समझ नहीं आता कि ऐसा क्यों होता। मैं विजुअल स्टूडियो 2005 का उपयोग कर रहा हूं और इंटरनेट पर देख रहा हूं, ऐसा लगता है कि यह समस्या वीएस 2008 के तहत हल हो गई है। हालांकि, मैं वीएस 2005 पर रहना चाहता हूं ...

using namespace std; हर जगह, या ऑर्डर बदलना मेरे शामिल कुछ भी बदलने के लिए प्रतीत नहीं होता है। परिभाषित _STD_BEGIN त्रुटि हल करता है, लेकिन < xlocinfo> में से कई का उत्पादन करता है।

यह कैसे हल किया जा सकता है?

+0

cmath सी ++ कोड से इस्तेमाल किया जा माना जाता है। क्या आप इस हेडर को सी फाइल से शामिल कर रहे हैं? –

+0

वास्तव में मेरी परियोजना में मेरी फाइलों में से एक सी में है और बाहरी "सी" के साथ शामिल है। इसमें "math.h" शामिल है जो तब मेरी बाहरी लाइब्रेरी की निर्देशिका शामिल है, और इसमें शामिल है cmath - I इस प्रकार यह नहीं पता कि इसे कैसे ठीक किया जाए। हालांकि, इन संकलन त्रुटियों को इस कोड को संकलित करने से पहले, मेरे कोड में पहले भी ऐसा लगता है। – WhitAngl

+0

सी कोड के इस विशेष टुकड़े को सी ++ में बदलना सीएमएथ से सभी संकलन त्रुटियों को बदलने के लिए प्रतीत नहीं होता है ... – WhitAngl

उत्तर

4

मुझे यकीन नहीं है कि मैंने आपका प्रश्न सही ढंग से पढ़ा है लेकिन ऐसा लगता है कि एक लाइब्रेरी अपनी स्वयं की math.h फ़ाइल भेजती है।

शायद आप अपने शामिल पथ में मूल निर्देशिका डालने का अनुमान लगा रहे हैं ताकि <my_lib/math.h> आपके कंपाइलर <math.h> के साथ विवाद किए बिना शामिल किया जा सके?

12

एक ही समस्या कुलपति से 10 मुझे लगता है कि में मौजूद है, कि <cmath> अपने आप में एक math.h शामिल है, लेकिन (सही है, जो इसे एक जो उपयोगकर्ता-परियोजना में बनाई गई है का उपयोग करता कुलपति के साथ भेज दिया है के insted निश्चित रूप से किसी अन्य सामग्री)।

समाधान: अपने प्रोजेक्ट में math.h नाम की फ़ाइल का कभी भी उपयोग न करें ... (या कहीं भी std को सही करें)।

+1

का उपयोग कर रहा हूं, मेरे बालों को फाड़ने के 2 घंटे बाद, आपकी टिप्पणी मुझे स्पॉट बनाया है मेरे पास मेरी परियोजना में Math.h है, जो विभिन्न पूंजीकरण के साथ भी std के math.h के साथ संघर्ष करता है। MathExtensions.h में मेरे Math.h को नामकरण समस्या हल हो गई। धन्यवाद! – KomodoDave

+0

अब "मैथ" मेरी छोटी "स्रोत फ़ाइलों पर चला जाता है कभी इस नाम का नाम नहीं होना चाहिए" सूची। (मेरे पास "स्रोत फ़ाइलों की एक लंबी सूची नहीं होनी चाहिए जिसमें इस स्ट्रिंग को शामिल नहीं किया जाना चाहिए" जिसमें "त्रुटि", "चेतावनी" और "असफल" शामिल है।) – davidbak

+0

समस्या वीएस 2015 और वीएस 2017 आरसी पर मौजूद है। ProjectnameMath.h में Math.h का नाम बदलना इसे हल करता है। –

0

समस्या शायद सी ++ सम्मेलनों के साथ सी पुस्तकालयों को मिला रही है। उदाहरण के लिए:

#include <math.h> 
namespace TEST { 
} 

यह ठीक संकलित है, जबकि:

namespace TEST { 
    #include <math.h> 
} 

यह नकली त्रुटियों की एक बड़ी संख्या उत्पन्न करता है।

#include <math.h> 
namespace TEST { 
    #include <math.h> 
} 

यह भी संकलित रूप में यह केवल एक बार शामिल किया जा सकता (पहली बार):

बस मुद्दा भ्रमित करने के लिए।

इसलिए भी:

#include <math.h> 
namespace TEST { 
    #include "SomethingThatIncludesMath.h" 
} 

काम करेगा, जबकि:

namespace TEST { 
    #include "SomethingThatIncludesMath.h" 
} 

नहीं होगा।

आप * .cpp फ़ाइल की बजाय * .c फ़ाइल में C++ शीर्षलेख सहित समान समस्याएं भी प्राप्त कर सकते हैं।

मुझे यकीन है कि सी और सी ++ के अन्य समान मिश्रण इसी तरह की समस्याओं का कारण बन सकते हैं।

0

(1) माइक्रोसॉफ्ट के अनुसार, सी 2873 का मतलब है;

'प्रतीक': प्रतीक का उपयोग किसी प्रयोग-घोषणा में नहीं किया जा सकता है निर्देश का उपयोग करते हुए नामस्थान कीवर्ड गुम है। यह संकलक को निर्देश का उपयोग करने के बजाय कोड का उपयोग करने के रूप में गलत व्याख्या करने का कारण बनता है।

(2) इसके अलावा जब मेरे पास C2039 के साथ C2873 था (मैंने सीईएफ 3 और सिंडर को मर्ज करने का प्रयास किया), किसी भी तरह से मैंने गुण-> कॉन्फ़िगरेशन गुण-> सी/सी ++ -> कोड जनरेशन को बदलकर दोनों त्रुटि को छोड़ दिया;

मिनिमल पुनर्निर्माण सक्षम करें: सक्षम समारोह स्तरीय लिंकिंग, हाँ (/ EHsc):: हाँ (/ ग्राम), सी ++ अपवाद सक्षम खाली

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