मेरे पास कुछ सी ++ कोड है जिसमें CreateDirectory().
नामक एक विधि शामिल है, पहले कोड केवल एसटीएल और बूस्ट का इस्तेमाल करता था, लेकिन मुझे हाल ही में <windows.h>
शामिल करना था ताकि मैं CSIDL_LOCAL_APPDATA
देख सकूं।मैं विंडोज हेडर फ़ाइलों में परिभाषित मैक्रोज़ के साथ नाम टकराव से कैसे बचूं?
अब, यह कोड:
filesystem.CreateDirectory(p->Pathname()); // Actually create it...
अब संकलित:
error C2039: 'CreateDirectoryA' : is not a member of ...
कौन सा winbase.h
में इस मैक्रो से मेल खाती है:
#ifdef UNICODE
#define CreateDirectory CreateDirectoryW
#else
#define CreateDirectory CreateDirectoryA
#endif // !UNICODE
पूर्व प्रोसेसर मेरी विधि को फिर से परिभाषित किया गया है कहते हैं। क्या इस नामकरण टकराव से बचने का कोई संभावित तरीका है? या मुझे अपने CreateDirectory()
विधि का नाम बदलना है?
अब आप जानते हैं कि क्यों Bjarne Stroustrup सी ++ से सी प्री-प्रोसेसर से छुटकारा पाना चाहता है - 'सी ++ के डिजाइन और विकास' देखें। –
उत्तर के साथ संभावित डुप्लिकेट: http://stackoverflow.com/questions/1394910/how-to-tame-the-windows-headers-useful-defines –
कृपया इसे वोट दें: http://visualstudio.uservoice.com/forums/121579-विज़ुअल-स्टूडियो/सुझाव/6656174-windows-h-that-doesn-t-define-ma –