मैं utilA.cpp में निम्नलिखित कोड का टुकड़ा होगा:सी ++ में यह आगे की घोषणा क्यों है?
// utilB.h
namespace xm
{
void zoo(struct tm timeval); //<-----line 0
}
// utilA.cpp
#include <utilB.h> //<----line 1
#include <time.h> //<----line 2
namespace xm
{
void foo()
{
struct tm time1 = {0}; //<----line 3
}
}
जीसीसी की शिकायत जब utilA.cpp संकलन,
error: variable 'xm::tm time1' has initializer but incomplete type
ऐसा लगता है इस वजह से utilA.h
लाइन 0 में struct tm
उपयोग कर रहा है, लेकिन time.h
शामिल किए बिना, और संकलक struct tm
को आगे घोषित करने के रूप में 0 0 में struct tm
का इलाज करता है, इसलिए struct tm
लाइन 2 पर xm::tm
को 0 0 पर शीर्षलेख के अंदर हल किया गया है।
तो क्या सी ++ मानक आगे 0 घोषणा के रूप में इस struct tm
को फ़ंक्शन पैरामीटर के रूप में परिभाषित करता है? कृपया इसे समझाने में मदद करें और मानक से उद्धरण सहायक होंगे।
अपने शीर्षलेख में '# शामिल करें' लिखें क्योंकि आपका हेडर इस पर निर्भर करता है। –
molbdnilo
हां, हमें utb.h में #in32e जोड़ना चाहिए, लेकिन चूंकि यह एक विशाल प्रोजेक्ट से कोड स्निपेट है, इसलिए हमें रूट कारण खोजने से पहले हमें बहुत उलझन में डाल दिया गया। –
ZijingWu
यह प्रोग्रामिंग की बहुत खराब शैली है। अनदेखी करो इसे। पीएस: क्या आपने शीर्ष पर '# include'-s को स्थानांतरित करने का प्रयास किया है? – i486