尝试使用C++ 20模块时获取C7621

ttisahbt  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(226)

下面是如何用c++20编写模块的例子:https://learn.microsoft.com/en-us/cpp/cpp/tutorial-named-modules-cpp?view=msvc-170和我继续收到错误C7621“未找到模块单元”XXX "的模块分区“XXX”。
根据该示例,我创建了下一个ixx * 主模块接口:

export module Chapter01;

export import :Question01;

然后我添加了ixx模块分区文件:

export module Chapter01:Question01;

import <iostream>;
import <set>;

using namespace std;

export bool IsUnique(const std::string& str);

和cpp实现文件:

module Chapter01:Question01;

import <iostream>;
import <set>;

using namespace std;

bool IsUnique(const std::string& str)
{
    set<char> charset = set<char>();

    for (const char c : str)
    {
        if (charset. Contains(c))
        {
            return false;
        }

        charset. Insert(c);
    }

    return true;
}

我一直收到C7621:未找到模块单元“Chapter01”的模块分区“Question01”
我一遍又一遍地看这个例子,似乎找不到区别。
完全删除cpp文件并将实现放在ixx文件中可以解决这个问题,但我仍然希望了解为什么这种分离不起作用。
使用模块时的最佳实践是什么?将ixx和cpp文件分开还是只包含ixx文件?

e0bqpujr

e0bqpujr1#

你使用的教程是不正确的,它建议你可以在同一个模块中有一个实现分区和一个接口分区使用相同的分区名。
这是不允许的。同一模块内的所有分区必须具有 * 不同 * 的分区名称。
此外,拥有实现分区的唯一原因是如果你想让其他模块单元能够导入该分区,大多数实现分区不需要导入,所以你的实现单元只需要使用module Chapter01;,它会自动导入Chapter01模块。

相关问题