При использовании функции друга появляется неполный тип - PullRequest
0 голосов
/ 21 октября 2018

Почему говорится о неполном типе, почему я не могу использовать такую ​​функцию друга, как это?

#include<iostream>
using namespace std;
class test;
class test2{
    public:
    void outd(test t)
    {
        cout <<t.x<<endl;
        cout<<t.y<<endl;
    }
}; 
class test{

  int x;  
    int y;
    friend void test2::outd(test t);
public:
    test(int x,int y)
    {
        this->x=x;
        this->y=y;
    }

};



int main()
{
    test t(1,2);
    test2 z;
    z.outd(t);
}

ошибка: prog.cpp: В функции-члене 'void test2 :: outd (test)':

prog.cpp: 6: 20: ошибка: 't' имеет неполный тип

void outd (test t)

prog.cpp: 3: 7: note:предварительное объявление «теста класса»

тест класса;

1 Ответ

0 голосов
/ 21 октября 2018

Вы должны определить метод test2::outd после того, как класс test был объявлен:

#include<iostream>
using namespace std;
class test;
class test2{
  public:
  void outd(test t);
};

Редактировать (к комментарию) Это называется предварительным объявлением

Объявление следующего идентификатора атрибута ключа класса;

Объявляет тип класса, который будет определен позже в этой области.Пока не появится определение, имя этого класса имеет неполный тип.Это позволяет классам, которые ссылаются друг на друга, и тип, данный классу, является неполным классом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...