我有两个班,Friend2Friend1的朋友。在Friend2访问Friend1的私有成员变量之后,我希望Friend1能够访问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


另外,作文或朋友班是更好的方法吗?为什么?

最佳答案

之所以得到//the error : use of undefined type,是因为仅声明了class Friend2,而此时尚未定义。为了解决此问题,将int friend1::comp(friend2* f2o)实现转移到friend1.cpp并从此处包含friend2.h

更新通常,如果两个类是共同的朋友(即使其中只有一个是另一个的朋友),这也是考虑设计的一个很好的理由。

关于c++ - C++错误:使用未定义的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25502891/

10-12 20:48