头文件未刷新- Visual c++ 2012

Header not refreshed - Visual C++ 2012

本文关键字:Visual c++ 2012 刷新 文件      更新时间:2023-10-16

使用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_

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 = 1改为int i = 2;我构建并运行,它输出1!如果重新编译并运行,它输出2。

  • dummy.cpp文件是重现错误所必需的。在现实生活中,这个文件使用的是include.h,而不是类A和B(但这似乎没有改变任何东西;在dummy.cpp中声明具有成员a和B的类C仍然会重现这个问题)。当删除文件dummy.cpp,或者将其重命名为zdummy.cpp(假设它将在main.cpp之后编译),那么问题就消失了。

  • 我尝试使用include警卫,使用pragma一次,使用它们两个,没有它们,问题在每种情况下都重现。

  • 我不能用Code::Blocks/GCC重现这个问题;我没有尝试使用旧版本的Visual Studio

是我错过了什么,还是这真的是Visual Studio中的一个bug ?如果是后者,是否有已知的解决方案?(除了re-building在每一步)

头文件必须是项目的一部分。如果不是,项目仍将构建,即编译器可以找到它,但Visual Studio不会跟踪文件的日期。

我过去也经历过这样的事情。

使用预编译头文件吗?如果您这样做,请从PCH中删除任何项目特定的标题。这是一个蹩脚的错误。仅在PCH中放置外部的,不变的头文件,如C/c++标准头文件,Windows头文件,Boost等