gpt4 book ai didi

c++ - fstream 奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 02:59:37 26 4
gpt4 key购买 nike

我正在尝试序列化我的类的一些私有(private)属性:

class Task {
public:
enum Status { COMPLETED, PENDIENT };
// BLAH BLAH BLAH
// CLASS GETTERS SETTERS ETC...
const std::fstream serializeObject( std::fstream &stream );
private:
void setID();
static int sCount;
int id;
std::string text;
Status status;
tm timestamp;
};

serializeObject 定义如下:

const std::fstream Task::serializeObject( std::fstream &stream ) {
stream.write((char *) &id, sizeof(int));
stream.write((char *) &text, sizeof(std::string));
stream.write((char *) &status, sizeof(Status));
stream.write((char *) &timestamp, sizeof(tm));
return stream;
}

GCC 返回大量错误:

In file included from /usr/include/c++/4.4/ios:39,
from /usr/include/c++/4.4/ostream:40,
from /usr/include/c++/4.4/iostream:40,
from task.cpp:1:
/usr/include/c++/4.4/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/include/c++/4.4/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/include/c++/4.4/iosfwd:47: error: within this context
/usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.4/iosfwd:87: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
/usr/include/c++/4.4/streambuf: In copy constructor ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’:
/usr/include/c++/4.4/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
/usr/include/c++/4.4/iosfwd:78: error: within this context
/usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.4/iosfwd:87: note: synthesized method ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’ first required here
task.cpp: In member function ‘std::fstream Task::serializeObject(std::fstream&)’:
task.cpp:104: note: synthesized method ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&)’ first required here

我做错了什么?我正在关注 this例子。复制了商店功能并进行了一些调整。

最佳答案

Task::serializeObject() 的返回值是一个fstream,而不是一个fstream&:这是试图复制stream 和流是不可复制的。来自 std::ios_base::ios_base :

The copy constuctor is deleted: streams are not copyable

更改为:

std::fstream& Task::serializeObject( std::fstream &stream )

请注意,我已删除 const,因为我不确定为什么需要这样做。

另外,这个:

stream.write((char *) &text, sizeof(std::string));

不会按照你的想法去做。 std::string 将包含指向实际数据的指针,实际数据不会使用它写入 stream。使用 std::string::c_str() , 可能与 std::string::length()因此在重新读取时字符串的长度是已知的。

关于c++ - fstream 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772991/

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