2014-10-10 137 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成員