2014-10-10 101 views
0

我想做一个简单的朋友功能工作,但不是只在一个源文件中。我似乎得到一个错误,我似乎无法找到答案为什么。C++ - 朋友功能

请看看我的代码:

----------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(); 
      ^

别人的帮助和解释?

回答

0

ClassOne不知道约ClassTwo,因此它不能与任何方法友好。您必须添加:

#include "classTwo.h" 

在您的classOne.h之上。

+0

能解决问题,但随后带来了另一个问题,在classTwo.cpp的twoPrintsOne()函数,即M_A和M_B不在范围内声明。我不确定他们的意思,以及我如何解决这个问题。 – tenkii 2014-10-10 23:24:23

0

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

你可以有ClassTwo从ClassOne继承,或在ClassTwo添加ClassOne成员