C ++类型不完整,无法访问方法和字段,无法包含

时间:2018-03-14 11:20:48

标签: c++ visual-c++ visual-studio-2017 resharper-c++

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

我认为错误可以通过循环依赖创建,但是在搜索它之后我找不到任何有效的解决方案。

如果可能的话,我不仅要获得如何解决它的答案,而且还要解释它是如何工作的,以及为什么它是错误的,所以我可以在将来避免类似的错误。

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

0 个答案:

没有答案