You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio使用C++模块出现重定义错误是否为Bug?

关于Visual Studio 17.7.6中C++模块与标准库头文件冲突的问题解答

问题场景

模块文件MyModule代码如下:

export module MyModule;
#include <iostream>

非模块文件main.cpp代码如下:

import MyModule;
#include <vector>

int main(void)
{
    return 0;
}

无论在Debug还是Release模式下编译,都会触发以下错误:

Error C2365 '__ISA_AVAILABLE_X86': redefinition; previous definition was 'enumerator'
Error C2365 'std::denorm_indeterminate': redefinition; previous definition was 'enumerator'

注释任意一个#include语句即可正常编译,使用的Visual Studio版本为17.7.6。

结论与解决方案

这是Visual Studio 17.7.x版本中的已知Bug,问题根源在于C++模块系统与标准库头文件的符号隔离逻辑缺陷:模块中引入的<iostream>和主文件中引入的<vector>会间接引入重复的系统级枚举定义,编译器未正确处理模块环境与传统头文件环境下的符号重复问题。

解决办法

  1. 升级Visual Studio版本:该Bug在17.8及以上版本中已被官方修复,升级后即可正常编译。
  2. 临时规避方案:
    • 注释其中一个冲突的#include语句;
    • 将主文件中的<vector>改为模块导入方式(需开启C++20模块支持):
      import MyModule;
      import std.vector;
      
      int main(void)
      {
          return 0;
      }
      

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:26:08