utilizzando Visual C++ 2012, senza intestazioni precompilate:Header non rinfrescato - Visual C++ 2012
Quando cambio un file di intestazione che è incluso in più file, la modifica non viene preso in considerazione quando si costruisce. Se si ricostruisce tutto, la modifica viene presa in considerazione.
caso Riproduzione:
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;
}
Emette 1.
Ora posso cambiare int i = 1
-int i = 2
in include.h; Io costruisco ed eseguo, emette 1! Ho ricostruire e corro, emette 2.
Il dummy.cpp file è necessario per riprodurre l'errore. Nella vita reale, questo file utilizza include.h ma non le classi A e B (ma questo non sembra cambiare nulla, dichiarando una classe C con membri A e B in dummy.cpp continuerà a riprodurre il problema). Quando si rimuove il file dummy.cpp o rinominandolo in zdummy.cpp (presumibilmente verrà compilato dopo main.cpp), quindi il problema scompare.
Ho provato con le protezioni incluse, con una volta sola pragma, con entrambe, con nessuna di esse, il problema è riprodotto in ogni caso.
Non riesco a riprodurre questo problema con Code :: Blocks/GCC; Non ho provato con le versioni precedenti di Visual Studio.
Mi manca qualcosa o si tratta di un bug in Visual Studio? Se quest'ultimo, c'è una soluzione nota? (Altro di re -building in ogni fase)
Presumo che hai salvato le modifiche prima di costruire (e/o abilitato l'opzione "salva automaticamente tutti i file prima della creazione")? –
È interessante notare che non è disponibile questa opzione in Visual Studio 2012. Mi sono assicurato che le mie modifiche siano state salvate prima di _buiding_ o _rebuilding all_. Ho anche provato a non salvare prima di costruire o ricostruire, ma mi salva, dal momento che posso vedere il * a destra del nome del file nella scheda scomparire. – bonob