0

我对 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;
}

我认为该错误可能是由循环依赖造成的,但是在搜索了很长时间后我找不到任何可行的解决方案。

如果可能的话,我不仅想得到如何解决它的答案,还想知道它是如何工作的以及为什么会出错,这样我以后就可以避免类似的错误。

我希望我的错误足够好。提前感谢您的任何回答。

4

0 回答 0