我想我的序列化類的一些私有屬性:fstream的怪異的行爲
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 *) ×tamp, 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的例子。複製了商店功能並適應了一下。
除了已經提到的明顯問題('std :: fstream'沒有拷貝構造函數),你應該用'std :: ostream'來實現你的serialize方法:你不需要嘗試從中讀取,在實現中也不需要特定的fjile流操作。因此,接收並返回一個'std :: ostream&'可以使你的函數更加廣泛地適用。 –
通過返回std :: ostream&獲得什麼優勢?像鏈接?你能解釋一下我的廣泛適用性嗎?謝謝:) – jviotti
是的,你會得到鏈接。 –