我对 C++ 项目有疑问。如果相关,我将 resharper c++ 用于 Visual Studio 2017。
当我有 2 个类(A,B)并且它们相互包含时,有时 resharper 会在 B 中将 #include "Ah" 涂黑,因为它不会被使用,即使我在 B 类中使用了 A,但我不能编译,因为它不知道“A”是什么。
Resharper 甚至提议为我添加#include "Ah",但如果我点击接受它,它会说:
由于源代码中的错误,很可能无法执行此操作
我可以通过添加“A级”来“修复”它;就在声明类 B 之前,但随后它看到 A,因为它没有任何方法或字段。
这是生成错误的代码的最小完整示例。
啊文件
#ifndef A_H
#define A_H
#include "B.h"
class A
{
public:
B** bs;
A() : bs(new B*[5])
{
for (int i = 0; i < 5; i++)
{
bs[i] = nullptr;
}
};
void do_something_in_A()
{
//something
}
};
#endif
文件
#ifndef B_H
#define B_H
#include "A.h"
class A; //if I don't add it I can't compile, if I add it I cannot access methods and fields in A as shown below
class B
{
public:
A* a;
B(A* a) : a(a) {};
void do_something_in_B()
{
//a->do_something_in_A(); doesn't work
}
};
#endif
main.cpp 文件
#pragma once
#include <iostream>
#include "A.h"
int main()
{
A a;
system("pause");
return 0;
}
我认为该错误可能是由循环依赖造成的,但是在搜索了很长时间后我找不到任何可行的解决方案。
如果可能的话,我不仅想得到如何解决它的答案,还想知道它是如何工作的以及为什么会出错,这样我以后就可以避免类似的错误。
我希望我的错误足够好。提前感谢您的任何回答。