#include <iostream>
class B;
class A{
int a;
public:
friend void B::frndA();
};
class B{
int b;
public:
void frndA();
};
void B::frndA(){
A obj;
std::cout << "A.a = " << obj.a << std::endl;
}
int main() {
return 0;
}
When trying to compile this code, some errors occurred. E.g.
invalid use of incomplete type
What are the problems in this code?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With