Ошибка C ++: использование неопределенного типа

0

У меня есть два класса, Friend2 - друг Friend1. После того, как Friend2 доступ к Friend1 члена Friend1, я хочу, чтобы Friend1 мог получить доступ к Friend2 открытого пользователя Friend2. Поэтому я решил использовать композицию внутри Friend1. Однако компилятор показывает мне ошибку:

use of undefined type 'friend2'

Затем я попробовал другой способ, сделав Friend1 другом Friend2 тоже. Но у меня все еще была такая же ошибка. Кто-нибудь научит меня, как решить? Большое спасибо!

#ifndef FRIEND1_H
#define FRIEND1_H

class friend2;

class friend1 {
  private:
    int x;
    public:
    friend1();

    int comp(friend2* f2o);

    friend class friend2;
    };

    friend1::friend1() {
      x = 1;
    }

    int friend1::comp(friend2* f2o) {
      return f2o->getxx(); //the error : use of undefined type 
    }

#endif


#ifndef FRIEND2_H
#define FRIEND2_H

#include "friend1.h"
#include <iostream>

class friend2 {
  private:
    int xx;
    public:
    friend2();
    void p(friend1* f1o);

    int getxx() const;

    friend class friend1;
    };

    friend2::friend2() {}

    void friend2::p(friend1* f1o) {
      xx = f1o->x;
    }

    int friend2::getxx() const {
      return xx;
    }

#endif

Кроме того, является ли состав или класс друзей лучшим способом сделать это? Зачем?

  • 0
    Полагаю, что вам нужно иметь файл friend1.cpp включающий в friend1.h и friend2.h , и friend2.h , а затем реализация friend1::comp() познакомится со структурой friend2.
  • 0
    Спасибо за ваш первый ответ :) После вашей инструкции исходная ошибка исчезла. Но появляются ошибки LNK1169 и LNK2005, и я понятия не имею, что случилось.
Теги:

1 ответ

2
Лучший ответ

Вы получаете //the error: use of undefined type потому что class Friend2 объявлен, а не определен в этой точке. Чтобы решить эту int friend1::comp(friend2* f2o) переместите int friend1::comp(friend2* f2o) в friend1.cpp и friend2.h оттуда.

ОБНОВЛЕНИЕ В общем, если два класса являются общими друзьями (и даже если только один из них является другом для другого), это хорошая причина подумать о дизайне.

  • 0
    Спасибо за ваш ответ тоже :) исходная ошибка исчезла. Но появляются ошибки LNK1169 и LNK2005, знаете почему?
  • 0
    @WaiLokChan Что именно говорят сообщения об ошибках? Возможно, существует не встроенная функция или глобальная переменная, определенная в одном из файлов * .h.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню