2014-04-04 84 views
1

你好我正在學習關於運算符重載和朋友函數的過程。跨多個文件的好友功能

我已經聲明瞭運營商< <功能爲我的課在.h文件中的朋友,但我仍然無法訪問自定義功能在.cpp文件的私有成員變量

我的代碼如下:

Test.h

class Test 
{ 
private: 
    int size; 
public: 
    friend ostream& operator<< (ostream &out, Test& test); 
}; 

Test.cpp的

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

using namespace std; 

ostream& operator<< (ostream& out, Test& test) 
{ 
    out << test.size; //member size is inaccessible! 
} 

雖然我已經讓操作員< <功能成爲我班的朋友,但顯然大小無法訪問。我谷歌搜索了一下,沒有找到任何東西,所以任何人都可以幫助我?謝謝。

注意:如果我將類定義移動到.cpp文件,所有人都可以使用,所以我認爲我的問題與多個文件有關。

回答

1

在C++中,聲明的範圍從上到下。因此,如果您包含第一個Test.h之後,那麼<iostream>朋友聲明不知道類型std::ostream

解決辦法:

Test.h:

#include <iostream> 
class Test 
{ 
private: 
    int size; 
public: 
    friend std::ostream& operator<< (std::ostream &out,const Test& test); 
}; 

Test.cpp的:

#include "Test.h" 

std::ostream& operator<< (std::ostream& out,const Test& test) 
{ 
    out << test.size; 
    return (*out); 
} 

注意,#include <iostream>已從Test.cpp移到Test.h和全球的參數operator <<需要constTest& test。 const使操作員工作爲rvalues

+2

在cpp文件中的頭文件和'#include '中應該足夠了'#include '。 – MadScientist