C ++ - 好友功能

时间:2014-10-10 23:10:54

标签: c++ friend

我正在努力使一个简单的朋友功能工作,但不只是在一个源文件中。我似乎得到了一个错误,我似乎无法找到答案。

请查看我的代码:

----------classOne.h--------------
#ifndef CLASSONE_H_
#define CLASSONE_H_

using namespace std;

class ClassOne {
private:
    int m_a;
    int  m_b;
public:
    ClassOne(int a, int b);
    void printValuesOne();
    friend void ClassTwo::twoPrintsOne();
};

-

----------classOne.cpp------------
#include <iostream> 
#include "classOne.h"

using namespace std;

ClassOne::ClassOne(int a, int b) {
    m_a = a;
    m_b = b;
}

void ClassOne::printValuesOne() {
    cout << "m_a: " << m_a << " " << "m_b: " << m_b << endl;
}

----------classTwo.h-------------
#ifndef CLASSTWO_H_
#define CLASSTWO_H_

using namespace std;

class ClassTwo {
private:
    int m_c;
    int m_d;
public:
    ClassTwo(int c, int d);
    void printValuesTwo();
    twoPrintsOne();
};

#endif

-

---------classTwo.cpp-----------
#include <iostream> 
#include "classTwo.h"

using namespace std;

ClassTwo::ClassTwo(int c, int d) {
    m_c = c;
    `enter code here`m_d = d;
}

void ClassTwo::printValuesTwo() {
    cout << "m_c: " << m_c << " " << "m_d: " << m_d << endl;
}

void twoPrintsOne() {
    cout << "ClassTwo: " << m_a: " << m_a << " " << "m_b: " << m_b << endl;
}

基本上ClassOne和ClassTwo是相同的,但只有ClassTwo方法中的一个可以访问所有ClassOne的成员,因此ClassTwo可以打印ClassOne的成员变量。但是,当我尝试编译整个程序时(我还没有提供主要方法),我得到这个错误错误:

classOne.h:19:15: error: ‘ClassTwo’ has not been declared
friend void ClassTwo::twoPrintsOne();
            ^

有人可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:0)

ClassOne不了解ClassTwo,因此无法与其任何方法建立联系。你必须添加:

#include "classTwo.h"

在classOne.h之上。

答案 1 :(得分:0)

你对“朋友”应该做的事情感到困惑。 “友谊”ClassTwo将允许ClassTwo访问ClassOne的私人成员,就像它们是公开的一样。 它不会以任何方式将这两个类之间的成员链接起来。

您可以让ClassTwo继承ClassOne,或者在ClassTwo中添加ClassOne成员