提问人:YetiFan14 提问时间:11/16/2023 最后编辑:Remy LebeauYetiFan14 更新时间:11/16/2023 访问量:112
如何将 #include 与模块一起使用?
How do i use #include with modules?
问:
module;
#include <iostream>
export module modultest;
export class Test{
public:
Test(){}
void print(){
}
};
我想使用 创建一个函数,我需要,但如果我包含,我会得到多个错误,例如:print
cout
<iostream>
iostream
error: redefinition of 'void operator delete(void*, void*)'
180 | inline void operator delete (void*, void*) _GLIBCXX_USE_NOEXCEPT { }
我在 VSCode 中使用 g++ 编译器。
答:
0赞
Remy Lebeau
11/16/2023
#1
每 cppreference.com:
...
不应
在模块单元中使用 #include(在全局模块片段之外),因为所有包含的声明和定义都将被视为模块的一部分。相反,也可以使用导入声明将标头导入为标头单元:export(可选) import header-name attr(可选);
标头单元是从标头合成的独立翻译单元。导入标头单元将使其所有定义和声明都可访问。预处理器宏也是可访问的(因为预处理器可以识别导入声明)。
...
因此,请尝试改用。#include <iostream>
import <iostream>;
评论
5赞
Guillaume Racicot
11/16/2023
奇怪的是,OP 的代码是正确的,因为 include 位于全局模块片段中。我强烈怀疑 GCC 错误,因为 GCC 没有良好的模块支持
评论
#include
module
main
modultest
#include <compare>
import std
import std
<assert.h>
<cassert>
namespace std