我的C ++项目有问题。如果那是相关的,我会在2017年的Visual Studio中使用resharper c ++。
当我有2个班级(A,B)并且他们互相包括时,有时候重新粉刺黑色#include" A.h"因为它不会被使用,即使我在B级中使用了A,我也无法编译,因为它不知道" A"是
Resharper甚至提议添加#include" A.h"对我而言,如果我点击接受它,它会说:
由于源中的错误,无法执行此操作 代码
我可以"修复"通过添加" A类;"在宣布B类之前,它会看到A,因为它没有任何方法或字段。
以下是生成错误的最小代码示例。
A.h档案
#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
B.h档案
#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;
}
我认为错误可以通过循环依赖创建,但是在搜索它之后我找不到任何有效的解决方案。
如果可能的话,我不仅要获得如何解决它的答案,而且还要解释它是如何工作的,以及为什么它是错误的,所以我可以在将来避免类似的错误。
我希望我的错误足够好。提前感谢您的任何答案。