我想在一个模块中包含另一个模块,但由于以下错误无法编译:
"因为存在循环依赖关系,所以无法构建以下源文件:Module1.ixx依赖于Module2.ixx,而Module2.ixx依赖于Module1.ixx."
我想让modClass1_包含modClass2_类,而modClass2_包含指向静态modClass1_的指针。
使用C++17头文件和源文件(.h和.cpp)成功尝试的代码:
// Class1.h
#pragma once
#include "Class2.h"
class modClass2_;
class modClass1_
{
public:
modClass1_() {};
~modClass1_() {};
int V = 2;
int getV() { return V; };
static modClass2_ mc2;
};
extern modClass1_ mc1;
// Class1.cpp
#include "Class1.h"
modClass1_ mc1;
modClass2_ modClass1_::mc2;
// Class2.h
#pragma once
#include "Class1.h"
class modClass2_
{
public:
modClass2_() {};
~modClass2_() {};
int V = 1;
int getV() { return V; };
int getClass1V();
};
// Class2.cpp
#include "Class2.h"
int modClass2_::getClass1V()
{
return mc1.V;
}
// Main.cpp
#include "Class1.h"
#include <iostream>
int main()
{
std::cout << mc1.getV() << "\n"; // gets modClass1_ V directly
std::cout << mc1.mc2.getClass1V() << "\n"; // gets modClass1_ V through modClass2_ through modClass1_
std::cout << mc1.mc2.getV() << "\n"; // gets modClass2_ V through modClass1_
}
我尝试使用C++20模块 (.ixx) 编写的代码,但失败了
// Module1.ixx
export module Module1;
import Module2;
export class modClass1_
{
public:
modClass1_() {};
~modClass1_() {};
int getV() { return V; };
modClass2_ mc2;
int getModule2V() { return mc2.V; };
int V = 1;
};
export modClass1_ mc1;
// Module2.ixx
export module Module2;
import Module1;
export class modClass2_
{
public:
modClass2_() {};
~modClass2_() {};
int getV() { return V; };
int getModule1V() { return mc1.V; };
int V = 2;
};
欢迎提供任何帮助或建议。
环境: Visual Studio 2019 | MSVC-2019 | C++20 | Windows 10 Pro
Class2.h
需要包含Class1.h
?声明指针变量只需要前向声明即可。 - Some programmer dude#include "class2.h"
,而 class2.h 包含#include "class1.h"
。这是一个循环依赖,它根本无法工作。这与模块无关。 - Pete Becker