gpt4 book ai didi

c++ - 创建自定义迭代器结构以使用 cstdio

转载 作者:行者123 更新时间:2023-11-30 05:09:15 28 4
gpt4 key购买 nike

我正在尝试创建一个迭代器来遍历我的文件。我的文件是二进制的,里面有 int 值,所以在我看来,它应该像那样工作。但是我收到错误提示“无效使用数据成员‘IntFile::file’”所以我在代码中标记了我收到错误的地方。我该如何管理它?

#include <iostream>
#include <cstdio>


using namespace std;


class IntFile
{
public:
int index;
FILE* file; // Error here
IntFile() {}
~IntFile() {}
int mnumbers[10];
int mnumbers2[10];
int value;

// And this whole class does not work
class iterator
{
bool operator ++ ()
{
file = fopen ("text.txt", "r+b");
fseek (file, 4*index, SEEK_CUR);
fclose(file);
}
bool operator -- ()
{
file = fopen ("text.txt", "r+b");
fseek (file, (-4)*index, SEEK_CUR);
fclose(file);
}
/*
iterator begin()
{
return ;
}
iterator end()
{
return ;
}
*/
};

};

最佳答案

I'm getting errors says "invalid use of data-member 'IntFile::file'"

IntFile::iterator 没有数据成员 file,也没有隐式引用 IntFile 的实例(就像在 Java 中的情况一样)。

IntFile::iterator 需要引用 IntFile 才能使用该数据成员:

class iterator
{
explicit iterator(IntFile &file) : file(file) {}

// Your other code

private:
IntFile &file;
};

然后您将能够访问file.filefile.index

但是,如果您创建多个迭代器并期望它们指向文件中的不同位置,这将失败,因为使用这种方法它们都共享一个文件句柄,因此共享该文件中的一个位置。您可以让每个迭代器跟踪它自己的位置并在每个操作之前寻找那里(不是线程安全的),或者您可以为每个迭代器复制文件句柄(每个迭代器使用一个额外的文件描述符)。

或者,只对文件进行内存映射并使用指向映射地址空间的指针作为迭代器可能会容易得多。

关于c++ - 创建自定义迭代器结构以使用 cstdio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46304569/

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