web-dev-qa-db-ja.com

モジュールをインポートする標準的な方法

私は現在、Windows(MSVC)とLinux(Clangおよび/またはGCC)の両方をコンパイルする必要があるコード内のC++モジュールを使用しようとしています。

私は現在Visual Studioで開発しており、「標準適合モード」(/ permissive-)を使用してコードをできるだけポータブルとして使用しました。

ただし、次のコード

import std.core;
int main()
{
    std::cout << "Hello, World! haha" << std::endl;

    std::vector<int> myVec{4};

    std::map<std::string, size_t> myMap;

    return 0;
}
 _

/ permissive-flagでコンパイルできません。次のエラーが発生します。

E3223インポートのためのモジュールファイル "std.core"が見つかりません

エラーC2664: 'int _crtdbgreport(int、const char *、int、const char *、const char *、...)': 'int'から 'cont char *'への引数4を変換することはできません。

私は "Std.core"がWindowsのみのものかもしれませんので、次のことを試してみました(多くの例でそれを見ました)。

import <iostream>;
import <vector>;
import <map>;
 _

しかし、それは次のエラーをもたらします:

エラーC7612: 'path_to_vs\include\iostream'のヘッダーユニットを見つけることができませんでした

エラーC7612: 'path_to_vs\include\vector'のヘッダー単位を見つけることができませんでした

エラーC7612: 'path_to_vs\include\map'のヘッダーユニットを見つけることができませんでした

注:PATH_TO_VS\Includeの "iOStream"、 "Vector"、および "Map"という名前のファイルが実際にあります。

したがって、C++モジュールをインポートする標準的な方法は何ですか? 「Import Std.core」が標準的な方法である場合、なぜそれは/許可を編集しないのですか?

私はVisual Studio 2019(Community)とCmakeを使っています。

編集:

すみません、私は私のコンパイラのフラグを伝えるのを忘れました:

/experimental:module
/std:c++latest
/W4
/WX
/permissive-
/MDd
/EHsc
 _

コードは/ permissive-なしでコンパイルされているが、設定されているときではありません。私は理由を理解することができません

7
Geroz1501

https://docs.microsoft.com/en-us/cpp/cpp/modules-cpp?view=vs-2019 コンパイラスイッチを使用する必要があります。

  • /実験:モジュール
  • / STD:C++最新の
  • / ehsc.
  • / MD

プロジェクトの実験モジュールのサポートを構成するだけでなく。

2
KarlM