विजुअल 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 के बाद संकलित किया जाएगा), तो समस्या गायब हो जाता है।
मैंने गार्ड को शामिल करने की कोशिश की, एक बार प्रज्ञा के साथ, उनमें से दोनों के साथ, प्रत्येक मामले में समस्या का पुनरुत्पादन किया जाता है।
मैं संहिता :: ब्लाकों/जीसीसी के साथ इस समस्या को पुन: नहीं कर सकते; मैंने विजुअल स्टूडियो के पुराने संस्करणों के साथ प्रयास नहीं किया।
क्या मुझे कुछ याद आ रहा है या यह वास्तव में विजुअल स्टूडियो में एक बग है? यदि उत्तरार्द्ध, क्या एक ज्ञात कामकाज है? (अन्य की तुलना में फिर हर कदम पर का निर्माण) हेडर फाइल
बूस्ट मैं तुम्हें निर्माण से पहले परिवर्तनों को सहेजा मान (और/या सक्षम विकल्प "स्वचालित रूप से निर्माण करने से पहले सभी फ़ाइलों को सहेजने")? –
दिलचस्प बात यह है कि विजुअल स्टूडियो 2012 में ऐसा कोई विकल्प नहीं है। मैंने यह सुनिश्चित किया है कि मेरे परिवर्तन _buiding_ या _rebuilding all_ से पहले सहेजे गए थे। मैंने बिल्डिंग या पुनर्निर्माण से पहले भी सहेजने की कोशिश नहीं की, लेकिन यह मेरे लिए बचाता है, क्योंकि मैं टैब में फ़ाइल नाम के दाईं ओर * गायब हो सकता हूं। – bonob