标题没有刷新 - Visual C ++ 2012

时间:2013-04-16 19:03:47

标签: c++ visual-c++ visual-studio-2012 header-files

使用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中声明一个带有成员A和B的C类.cpp 仍会重现问题)。删除文件 dummy.cpp ,或将其重命名为 zdummy.cpp (可能会在 main.cpp 之后编译),然后问题消失了。

  • 我尝试使用包含警卫,使用pragma一次,但是没有一个,在每种情况下都会重现问题。

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

我是否遗漏了某些内容,或者这是否是Visual Studio中的一个错误?如果是后者,是否有已知的解决方法? (除了重新 - 建立每一步)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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