将指向文件缓冲区的指针传递给 class,期望从 class 中的文件读取
Pass a pointer to a file buffer to a class, expecting to read from file inside a class
我想学习如何通过将流的指针传递给 class 在文件中进行搜索。
我可以使用 std::fstream
和 std::filebuf*
成功地从文件中获取第一个字符
char symbol;
std::fstream by_fstream;
by_fstream.open("First_test_input.txt");
std::filebuf* input_buffer = by_fstream.rdbuf();
symbol = input_buffer -> sbumpc();
std::cout << "\nSymbol that get from a file by rdbuf(): " << symbol;
输出:Symbol that get from a file by rdbuf(): M
但我不确定如何将任何指向文件原始流的指针从 main 发送到 class。
理想情况下,做这样的事情会很棒:
#include <iostream>
#include <fstream>
class from_file
{
public:
char c;
from_file () {
std::cout << "\nCharacter that get from file by to class variable"
<<" then printed: " << c;
};
from_file (char *pointer){
c = pointer -> sbumpc();
};
~from_file ();
};
int main(){
std::fstream by_fstream;
by_fstream.open("First_test_input.txt");
std::filebuf* input_buffer = by_fstream.rdbuf();
from_file send(&input_buffer);
from_file show;
return 0;
}
正在寻找关于在哪里可以找到类似的文档的建议 headers 来完成这样的任务。
你的做法全错了。
首先,您应该传递(引用)流本身,而不是其内部缓冲区。使用 std::istream
方法,如 read()
或 get()
或 operator>>
从流中读取,让它为您处理自己的缓冲区。
其次,您正在尝试让第二个完全独立的对象“神奇地”知道前一个对象持有什么。这也不会如你所愿。
尝试更像这样的东西:
#include <iostream>
#include <fstream>
class from_stream
{
public:
char c;
from_stream (std::istream &in){
c = in.get();
// or: in.get(c);
// or: in.read(&c, 1);
// or: in >> c;
};
void show() const {
std::cout << "\nCharacter that get from file by to class variable"
<<" then printed: " << c;
}
};
int main(){
std::ifstream by_ifstream;
by_ifstream.open("First_test_input.txt");
from_stream send(by_ifstream);
send.show();
return 0;
}
我想学习如何通过将流的指针传递给 class 在文件中进行搜索。
我可以使用 std::fstream
和 std::filebuf*
char symbol;
std::fstream by_fstream;
by_fstream.open("First_test_input.txt");
std::filebuf* input_buffer = by_fstream.rdbuf();
symbol = input_buffer -> sbumpc();
std::cout << "\nSymbol that get from a file by rdbuf(): " << symbol;
输出:Symbol that get from a file by rdbuf(): M
但我不确定如何将任何指向文件原始流的指针从 main 发送到 class。
理想情况下,做这样的事情会很棒:
#include <iostream>
#include <fstream>
class from_file
{
public:
char c;
from_file () {
std::cout << "\nCharacter that get from file by to class variable"
<<" then printed: " << c;
};
from_file (char *pointer){
c = pointer -> sbumpc();
};
~from_file ();
};
int main(){
std::fstream by_fstream;
by_fstream.open("First_test_input.txt");
std::filebuf* input_buffer = by_fstream.rdbuf();
from_file send(&input_buffer);
from_file show;
return 0;
}
正在寻找关于在哪里可以找到类似的文档的建议 headers 来完成这样的任务。
你的做法全错了。
首先,您应该传递(引用)流本身,而不是其内部缓冲区。使用 std::istream
方法,如 read()
或 get()
或 operator>>
从流中读取,让它为您处理自己的缓冲区。
其次,您正在尝试让第二个完全独立的对象“神奇地”知道前一个对象持有什么。这也不会如你所愿。
尝试更像这样的东西:
#include <iostream>
#include <fstream>
class from_stream
{
public:
char c;
from_stream (std::istream &in){
c = in.get();
// or: in.get(c);
// or: in.read(&c, 1);
// or: in >> c;
};
void show() const {
std::cout << "\nCharacter that get from file by to class variable"
<<" then printed: " << c;
}
};
int main(){
std::ifstream by_ifstream;
by_ifstream.open("First_test_input.txt");
from_stream send(by_ifstream);
send.show();
return 0;
}