c++ - header 未刷新 - Visual C++ 2012

标签 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_

虚拟.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之后编译),然后问题消失了。

  • 我尝试使用 include guards,使用 pragma once,使用它们,都没有,在每种情况下都会重现问题。

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

我是不是遗漏了什么或者这真的是 Visual Studio 中的错误?如果是后者,是否有已知的解决方法? (除了每一步都重新构建)

最佳答案

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

关于c++ - header 未刷新 - Visual C++ 2012,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045032/

相关文章:

windows-8 - 使用 Visual Studio 2012 调试 IIS 8。权限不足

C++:查找依赖于 Visual C++ Redistribute 的内容的方法

c++ - 使用 bluez 5.43 和 DBus 从 BLE 传感器读取广告数据包的正确方法是什么

vb.net - 我可以在 Ubuntu 上为 Visual C++ 和 Visual Basic 编写代码吗?

c++ - 默认预处理器定义和跨平台编译

c++ - strtrok_s 函数不接受 2 个参数

c# - Visual Studio 2012 RC 中不显示重构菜单

c++ - 将 Node.js 模块中的 Boost 与 node-gyp 链接起来

c++ - 从二进制文件中读取结构

c++使用字符串的动态数组不接受字符串