2013-04-16 5 views
6

विजुअल C++ 2012 का उपयोग करना, precompiled हेडर के बिना:हैडर ताज़ा नहीं - विजुअल C++ 2012

जब मैं उस से अधिक फ़ाइलों में शामिल है एक हेडर फाइल बदलने के लिए, परिवर्तन जब निर्माण पर ध्यान नहीं दिया गया है। यदि मैं सभी का पुनर्निर्माण करता हूं, तो परिवर्तन को ध्यान में रखा जाता है।

प्रजनन मामला:

include.h

#ifndef INCLUDE_H_ 
#define INCLUDE_H_ 

class A { 
public: 
    A(int i) : i_(i) { } 
    int i_; 
}; 

class B { 
public: 
    B(int i = 1) : a_(i) { } 
    A a_; 
}; 

#endif INCLUDE_H_ 

dummy.cpp

#include "include.h" 

main.cpp

#include <iostream> 
#include "include.h" 

int main(int, char**) { 
    B b; 
    std::cout << b.a_.i_ << std::endl; 
    return 0; 
} 

यह आउटपुट 1.

अब मैं include.h में int i = 2 करने के लिए int i = 1 बदल; मैं निर्माण और दौड़ता हूं, यह 1 आउटपुट करता है! मैं पुनर्निर्माण और चलाने , यह आउटपुट 2.

  • dummy.cpp फ़ाइल त्रुटि पुन: पेश करने के लिए आवश्यक है। वास्तविक जीवन में, यह फ़ाइल का उपयोग कर रही है। लेकिन कक्षा ए और बी नहीं है (लेकिन यह कुछ भी नहीं बदलता प्रतीत होता है; में सदस्यों ए और बी के साथ कक्षा सी घोषित करना dummy.cpp अभी भी पुन: पेश करेगा मुसीबत)। जब फ़ाइल dummy.cpp निकालने या zdummy.cpp लिए इसका नाम (संभवतः यह main.cpp के बाद संकलित किया जाएगा), तो समस्या गायब हो जाता है।

  • मैंने गार्ड को शामिल करने की कोशिश की, एक बार प्रज्ञा के साथ, उनमें से दोनों के साथ, प्रत्येक मामले में समस्या का पुनरुत्पादन किया जाता है।

  • मैं संहिता :: ब्लाकों/जीसीसी के साथ इस समस्या को पुन: नहीं कर सकते; मैंने विजुअल स्टूडियो के पुराने संस्करणों के साथ प्रयास नहीं किया।

क्या मुझे कुछ याद आ रहा है या यह वास्तव में विजुअल स्टूडियो में एक बग है? यदि उत्तरार्द्ध, क्या एक ज्ञात कामकाज है? (अन्य की तुलना में फिर हर कदम पर का निर्माण) हेडर फाइल

+0

बूस्ट मैं तुम्हें निर्माण से पहले परिवर्तनों को सहेजा मान (और/या सक्षम विकल्प "स्वचालित रूप से निर्माण करने से पहले सभी फ़ाइलों को सहेजने")? –

+0

दिलचस्प बात यह है कि विजुअल स्टूडियो 2012 में ऐसा कोई विकल्प नहीं है। मैंने यह सुनिश्चित किया है कि मेरे परिवर्तन _buiding_ या _rebuilding all_ से पहले सहेजे गए थे। मैंने बिल्डिंग या पुनर्निर्माण से पहले भी सहेजने की कोशिश नहीं की, लेकिन यह मेरे लिए बचाता है, क्योंकि मैं टैब में फ़ाइल नाम के दाईं ओर * गायब हो सकता हूं। – bonob

उत्तर

2

परियोजना का हिस्सा होना चाहिए। यदि यह प्रोजेक्ट नहीं है तो भी निर्माण होगा यानी कंपाइलर इसे पा सकता है, लेकिन विजुअल स्टूडियो फ़ाइल की तारीख को ट्रैक नहीं करेगा।

+0

हेडर फ़ाइल प्रोजेक्ट का हिस्सा है। – bonob

+0

@ 3li3, क्या इसका मतलब यह है कि यह समाधान एक्सप्लोरर में "शीर्षलेख फ़ाइलें" के अंतर्गत दिखाई देता है? –

+0

हां, यह करता है, और मेरी प्रजनन परियोजना खरोंच से बनाई गई है, मैंने परियोजना के भीतर से सभी 3 फाइलें जोड़ दी हैं। – bonob

0

मैंने पहले भी इस तरह के बात के माध्यम से किया गया है।

आप precompiled हेडर का उपयोग करते हैं? यदि आप करते हैं तो कृपया पीसीएच से किसी भी परियोजना विशिष्ट शीर्षलेख को हटा दें। यह एक लंगड़ा गलती है। केवल जगह बाहरी, nonchanging headersin PCH, सी/सी की तरह ++ मानक हेडर, विंडोज हेडर, आदि

+0

ठीक है, पूछने वाले को बताया कि उन्होंने "लंगड़ा गलती" की है जो बहुत विनम्र नहीं है। –

+0

मैं प्रीकंपील्ड हेडर का उपयोग नहीं करता हूं। मुझे लगा कि यह कारण हो सकता है, लेकिन मैंने यह सुनिश्चित किया कि कई बार प्रीकंपिल्ड हेडर समीकरण से बाहर थे। – bonob

+0

लॉल। मैंने पहले ऐसा किया है। यह उसकी गलती नहीं है। अगर वह कभी ऐसा करता है तो वह होगा: पी पीसीएच बहुत तेजी से बनाता है लेकिन यह सही नहीं है जब ** में दर्द हो सकता है। –

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