私は下のクラスの中でフレンド関数を宣言しました。フレンド関数を使用して別のクラスのプライベートメンバーを反復する
クラスモデルは
#include "fileio.h"
class fileio;
class model
{
std::vector<element>m_elements;
public:
friend void fileio::element_iterator();
}
element_iterator()
class fileio
のパブリック関数です。
#include "model.h"
class model;
class fileio
{
model* m_model;
public:
fileio(model*);
void element_iterator();
}
element_iterator()
関数は以下のように定義されるFILEIOクラス。
void fileio::element_iterator()
{
for(auto &iter : m_model->m_elements)
{
//some functions
}
}
フレンド機能を使用して別のクラスからm_elements
を繰り返していきたいと思います。しかし、私は以下のようにエラーを取得しています:
エラー:
model.h : error: invalid use of incomplete type 'class fileio'
friend void fileio::read_boundary();
model.h : error: forward declaration of 'class fileio'
class fileio;
modell.h : In member function 'void fileio::read_boundary()':
cmodel.h : error: 'std::vector<element> model::m_elements' is private
std::vector<element>m_elements;
fileio.cpp: error: within this context
for(auto iter:m_model->m_elements)
EDIT:
:fileio.hでclass model
の前方宣言がなければ
は以下のようにエラーの別のセットを提供します
error: 'model' has not been declared
fileio(model*);
error: 'model' does not name a type
model* m_model;
candidates are:
fileio::fileio(int*)
fileio(model*);
no known conversion for argument 2 from 'model*' to 'int*'
友達の関数宣言とその定義をコメントアウトすると、プログラムはエラーなく実行されます。 どうすれば解決できますか?
あなたはだけでなく、 'クラスFILEIOの'の#include "fileio.hを" '必要があります。' 'model.h'に。 – songyuanyao
編集について: 'fileio.h'でも' class model; 'を削除しましたか? – songyuanyao
@songyuanyaoは、両方の方法を試しました。何も違いはありませんでした – hisham