Korzystanie z Visual C++ 2012, bez nagłówków prekompilowanymi:Header nie odświeżane - Visual C++ 2012
Kiedy zmienić nagłówek pliku, który znajduje się w wielu plików, zmiana nie jest brany pod uwagę przy budowaniu. Jeśli przebuduję wszystko, zmiana zostanie uwzględniona.
przypadku reprodukcji:
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;
}
ten wyprowadza 1.
Teraz mogę zmienić int i = 1
do int i = 2
w include.h; Buduję i biegam, wyprowadza 1! ja odbudować i biegać, wyprowadza 2.
dummy.cpp plik jest niezbędny do odtworzenia błędu. W rzeczywistości ten plik używa include.h, ale nie klasy A i B (ale to nie wydaje się niczego zmieniać, deklarowanie klasy C z elementami A i B w dummy.cpp nadal będzie odtwarzać problem). Podczas usuwania pliku dummy.cpp lub zmiany nazwy na zdummy.cpp (prawdopodobnie zostanie skompilowany po main.cpp), problem zniknie.
Próbowałem z włączonymi strażnikami, z pragma raz, z obiema, z żadnym z nich, problem jest reprodukowany w każdym przypadku.
Nie mogę odtworzyć tego problemu z Code :: Blocks/GCC; Nie próbowałem używać starszych wersji Visual Studio.
Czy brakuje mi czegoś lub czy jest to naprawdę błąd w Visual Studio? Jeśli to drugie, czy istnieje znane obejście tego problemu? (Inne niż re -building na każdym kroku)
Zakładam, że zapisałeś zmiany przed rozpoczęciem budowy (i/lub włączyłeś opcję "automatycznie zapisuj wszystkie pliki przed rozpoczęciem budowy")? –
Co ciekawe, nie ma takiej opcji w Visual Studio 2012. Upewniłem się, że moje zmiany zostały zapisane przed _buiding_ lub _rebuilding all_. Próbowałem również nie zapisywać przed budowaniem lub odbudowywaniem, ale to oszczędza dla mnie, ponieważ widzę * z prawej strony nazwy pliku w karcie znika. – bonob