我正在编写一个C++类,以将文件中的输入读取到称为“块”的预分配缓冲区中。
我希望调用者能够调用名为 GetNextFilledChunk()的公共(public)静态Chunk类方法,该方法
但是第2步很合适。无论我尝试了什么,尝试进入Chunk实例的私有(private)成员变量/函数都会导致g++ 4.2.1发出错误。
这是头文件中的部分类定义:
class Chunk
{
public:
Chunk();
...
static Chunk* GetNextFilledChunk();
...
private:
...
ssize_t m_ActualTextSize;
};
这是源文件中显示问题的部分:
#include "Chunk.h"
Chunk::
Chunk* GetNextFilledChunk()
{
...
theChunk = sInactiveChunks.top();
sInactiveChunks.pop();
...
theChunk->m_ActualTextSize = TextSize(); // PROBLEM IS HERE
...
return theChunk;
}
如图所示,g++提示GetNextFilledChunk()试图访问Chunk的私有(private)成员。
然后我想,也许它需要成为一个“ friend ”。但是我尝试在头文件中使GetNextFilledChunk()成为 friend 的所有操作都会导致错误。例如:
friend 静态Chunk * GetNextFilledChunk();
结果为“Chunk.h:23:警告:“Chunk * GetNextFilledChunk()”已声明为“静态”,但从未定义”
我真正感到奇怪的是,如果我只是简单地使GetNextFilledChunk()成为一个普通的旧函数,而不是一个静态成员函数,我就可以与它“交 friend ”,并且每个人都很高兴。但这似乎很愚蠢-为什么人们应该能够通过非类函数在类中执行某些操作,而该类不能通过静态成员函数完成?
那么... Chunk的GetNextFilledChunk()函数如何访问Chunk实例的私有(private)成员变量?
而且如果无法完成,这是C++的固有组成部分,还是g++中的一个bug?
最佳答案
这看起来有些奇怪:
Chunk::
Chunk* GetNextFilledChunk()
{
那是错字吗?应该是:
Chunk* Chunk::GetNextFilledChunk()
{
?看来您不小心将
GetNextFilledChunk
定义为普通函数,而不是Chunk
的成员。关于C++:公共(public)静态成员函数如何访问私有(private)实例成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1544991/