2012-06-22 19 views
14

मुझे सी ++ से सी तक एक एप्लिकेशन को फिर से लिखना है। मैं उबंटू 12.04 पर जीसीसी और ग्रहण का उपयोग कर रहा हूं। ऐसा करने में मैं यह त्रुटि सामने आने वालेtimespec समय में नहीं मिला है।

../src/TTNoddy.c: In function ‘main’: 
    ../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’ 

यहाँ मेरी कोड स्निपेट है कि समस्या

#include <time.h> 

    int main(void) { 

     timespec TS; 
     TS.tv_nsec = 1; 

     return 0; 
    } 

पुनरुत्पादित करता है मैं यहाँ उलझन में हूँ - मैं एक सी ++ सांकेतिक शब्दों में बदलनेवाला हूँ और कभी नहीं में एक शुद्ध सी आवेदन लिखा मेरा जीवन, लेकिन clock_gettime के लिए मैन पेज स्पष्ट रूप से इंगित करता है कि timespec उस समय में है। हेडर फ़ाइल जिसमें मैं शामिल हूं। मुझे क्या याद आया ??

उत्तर

17

timespec struct है, आपको इसे संकलक को स्पष्ट रूप से बताना होगा। यदि आप मैन्युअल रूप से मैन पेज को पढ़ते हैं तो आप देख सकते हैं कि ऐसा कहा गया है।

यह काम करना चाहिए:

#include <time.h> 

int main(void) { 
    struct timespec TS; 
    TS.tv_nsec = 1; 

    return 0; 
} 

अतिरिक्त नोट: यह एक typedef struct के रूप में परिभाषित किया गया था, तो आपको मैन्युअल struct हिस्सा जोड़ने के लिए की जरूरत नहीं होती। लेकिन, आप यह मान लेना चाहिए कि ज्यादातर/सभी शुद्ध सी structs एक typedef

+0

धन्यवाद। मुझे पता था कि यह एक संरचना थी, यह सिर्फ सी ++ से आ रहा है जहां मेरा कोड काम करता है, मुझे कभी नहीं पता था कि आपको संरचना के साथ प्रत्येक टाइमपेक को स्पष्ट रूप से घोषित करना था। मुझे लगता है कि ऐसे कई अंतर होंगे जो मुझे इस तरह मिलेंगे। – mathematician1975

+1

यह भी ध्यान दें कि टाइमपेक सी 8 9/सी 99 का हिस्सा नहीं है लेकिन पॉज़िक्स। http://stackoverflow.com/questions/3875197/std-c99-wtf-on-linux – Morpfh

3

यह टाइमपेक नहीं होना चाहिए क्योंकि टाइमपेक एक संरचना है। यह struct timespec होना चाहिए। कृपया तदनुसार अपना कोड संशोधित करें।

2

जब विजुअल स्टूडियो 2015 के तहत काम कर रहे परियोजना संकलन करने की कोशिश कर रहा यह त्रुटि आई के रूप में परिभाषित नहीं कर रहे हैं।

समाधान प्रीप्रोसेसर परिभाषाओं में HAVE_STRUCT_TIMESPEC जोड़ने का था।

जीयूआई के माध्यम से: प्रोजेक्ट गुण (पैन)> संपत्ति पृष्ठ (आइकन)> विन्यास गुण> C/C++> प्रीप्रोसेसर> प्रीप्रोसेसर परिभाषाएँ> संपादित करें> जोड़े HAVE_STRUCT_TIMESPEC

या मैन्युअल: संपादित प्रत्येक परियोजना

<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> 

एनबी:: फ़ाइल और <PreprocessorDefinitions> के प्रत्येक उदाहरण की जगह की तरह कुछ के साथ (वहाँ फ़ाइल प्रति कई हो सकते हैं) मैं इस सवाल का जवाब मिल गया somewhere on a Github issue, इसलिए मैं इसे यहां पोस्ट कर रहा हूं।

+1

यह भी देखें [टाइम्सपीसी पुनर्वितरण त्रुटि] (http://stackoverflow.com/q/33557506) और [टाइम्सपीसी: संरचना प्रकार त्रुटि c2011 ] (http://stackoverflow.com/q/33114535)। – jww