Я новичок в изучении c ++. Как использовать друга с функциями-членами из двух классов, содержащихся друг с другом? Я не смог найти хороший ответ через гугл
Ниже мой код:
#ifndef FriendTest_hpp
#define FriendTest_hpp
class FriendVisitor;
class FriendTest{
friend int FriendVisitor::getTestAdd();
private:
int add=23;
int getAdd(){
return add;
}
public:
void test(){
printf("hello");
}
FriendTest()=default;
};
#ifndef FriendVisitor_hpp
#define FriendVisitor_hpp
#include <stdio.h>
class FriendTest;
class FriendVisitor{
FriendTest* test;
public:
FriendVisitor(){
}
int getTestAdd();
};
#endif /* FriendVisitor_hpp */
IDE дает мне неправильную ошибку:
неполный тип ‘FriendVisitor, названный в описателе вложенного имени’
Каково решение?
Ваша проблема здесь:
class FriendVisitor;
class FriendTest{
friend int FriendVisitor::getTestAdd();
На этом этапе компиляции FriendTest
класс знает о существование из FriendVisitor
класс, но не любой из его членов, так как его объявление не является полным. Если вы измените порядок кода, чтобы полностью объявить FriendVisitor
во-первых, затем его объявление завершается, как только вы объявляете функцию друга в FriendTest
и он компилирует:
#include <stdio.h>
class FriendTest; // Forward declaration
class FriendVisitor{
FriendTest* test; // Only references the class, so only forward declaration needed
public:
FriendVisitor(){
}
int getTestAdd();
};
class FriendTest{
friend int FriendVisitor::getTestAdd(); // FriendVisitor is fully declared, friend function is legal
private:
int add=23;
int getAdd(){
return add;
}
public:
void test(){
printf("hello");
}
FriendTest()=default;
};
Других решений пока нет …