Forward declaration with friend function: invalid use of incomplete type

主宰稳场 提交于 2019-12-01 17:47:29

Place the whole of the class B ... declaration before class A. You haven't declared B::frndA(); yet.

#include <iostream>
using namespace std;

class B{
    int b;
public:
    void frndA();
};

class A{
    int a;
public:
    friend void B::frndA();
};



void B::frndA(){
    A obj;
    //cout<<"A.a = "<<obj.a<<endl;
}

int main() {
    return 0;
}

The problem is you can't friend a member function before the compiler has seen the declaration.

You are going to need to rearrange your code to solve the problem (i.e. move the definition of class B prior to class A).

You need to put the declaration of B before A. The compiler doesn't know about this: B::frndA(). A forward declaration is not enough information to infer what members the type has.

I would recommend to put your class A declaration in a file A.h and it's definition inside a file A.cpp. Likewise the same for the type B inside of B.h and B.cpp

At the top of each header file put #pragma once (or if you prefer include guards).

Then inside your B.h you can simply include A.h.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!