gpt4 book ai didi

c++ - 使用友元函数遍历另一个类的私有(private)成员

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:55 27 4
gpt4 key购买 nike

我在下面的类中声明了一个友元函数。

类模型

#include "fileio.h"
class fileio;
class model
{
std::vector<element>m_elements;
public:
friend void fileio::element_iterator();
}

element_iterator()class fileio 的公共(public)函数。

类文件io

#include "model.h"
class model;
class fileio
{
model* m_model;
public:
fileio(model*);
void element_iterator();
}

element_iterator() 函数定义如下。

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)

编辑:
如果 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*'

如果我注释掉友元函数的声明和它的定义,那么程序就可以正常运行了。我该如何解决?

最佳答案

model.h 中包含其完整定义,而不是 forward-declaring fileio

// fileio.h
class model;
class fileio
{
model* m_model;
public:
void element_iterator();
};

// model.h
#include "fileio.h"
class model
{
std::vector<int >m_elements;
public:
friend void fileio::element_iterator();
};

wandbox example


或者,您可以使整个 fileio 类成为 friend - 这将允许您使用它的forward-declaration,这可能是你想要什么取决于你的实际情况。

// model.h
class fileio;
class model
{
std::vector<int >m_elements;
public:
friend class fileio;
};

// fileio.h
class model;
class fileio
{
model* m_model;
public:
void element_iterator();
};

wandbox example

关于c++ - 使用友元函数遍历另一个类的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42053177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com