bon*_*nob 6 c++ header-files visual-c++ visual-studio-2012
使用Visual 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_
Run Code Online (Sandbox Code Playgroud)
dummy.cpp
#include "include.h"
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <iostream>
#include "include.h"
int main(int, char**) {
B b;
std::cout << b.a_.i_ << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这输出1.
现在我换int i = 1到int i = 2在INCLUDE.H ; 我建立并运行,它输出1!我重建并运行,输出2.
该dummy.cpp文件是需要重现错误.在现实生活中,这个文件使用include.h但不使用A和B类(但这似乎没有改变任何东西;在dummy.cpp中声明一个带有成员A和B的C类仍然会重现这个问题).删除文件dummy.cpp,或将其重命名为zdummy.cpp(可能会在main.cpp之后编译),然后问题就消失了.
我尝试使用包含警卫,使用pragma一次,同时使用它们,没有一个,在每种情况下都会重现问题.
我不能用Code :: Blocks/GCC重现这个问题; 我没有尝试使用旧版本的Visual Studio.
我错过了什么,或者这真的是Visual Studio中的错误?如果是后者,是否有已知的解决方法?(除了每一步重建)