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

如何在同一Visual Studio解决方案中跨项目导入C++模块?

解决C++模块引用时"找不到模块'Model'"的问题

问题场景

我是C++模块的新手。我有一个名为MyProject的项目,包含模块定义文件Model.ixx:

export module Model;
export import :Element;

以及分区文件Element.ixx:

#include <string>
export module Model:Element;

export class Element {
private:
    std::string m_name;
public:
    Element(std::string name) {
        m_name = name;
    }

    std::string getName() {
        return m_name;
    }

    void setName(std::string name) {
        m_name = name;
    }
};

同一解决方案中还有另一个项目MyProjectTest,已添加MyProject作为引用,包含文件MyProjectTest.cpp:

#include "pch.h"
#include "CppUnitTest.h"

import Model;

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace GsnEdTest
{
    TEST_CLASS(GsnEdTest)
    {
    public:
        
        TEST_METHOD(TestAttributeInit)
        {
            std::string name = "Test";
            Element e(name);
            Assert::AreEqual(name, e.getName());
        }
    };
}

编译该测试文件时失败,提示找不到模块'Model',需解决模块可见性问题。

解决步骤

  • 确认项目引用配置:打开MyProjectTest的项目属性,进入「框架和引用」节点,确保MyProject是项目引用而非文件引用。选中MyProject引用,查看属性,将「链接库依赖项」和「包含目录依赖项」都设为是。
  • 检查模块输出配置:在MyProject的属性中,进入「C/C++」->「所有选项」,确认「模块输出文件名」设置有效,编译后会生成.ifc(模块接口文件)和对应的目标文件。注意MyProject的输出目录要能被测试项目访问到。
  • 添加模块搜索路径:在MyProjectTest的属性中,进入「C/C++」->「常规」,找到「附加模块包含目录」,添加MyProject的输出目录(例如$(SolutionDir)MyProject\$(Configuration)\$(Platform)),让编译器能找到模块的.ifc文件。
  • 统一C++标准版本:两个项目都需设置为支持C20或更高版本:进入「C/C」->「语言」->「C标准」,选择ISO C++20 标准 (/std:c++20)或更高版本,因为C模块是C++20引入的特性。
  • 清理并重新生成:先清理两个项目的编译缓存(菜单「生成」->「清理解决方案」),再重新生成整个解决方案,避免旧编译文件干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:39