我正在尝试编写一个模板,用于从/向文件读取/写入结构。
为了避免愚蠢的错误,我想保留一份读/写逻辑 - 而不是两个独立的读/写功能中的两个副本。
但截至目前我已获得error C4430: missing type specifier - int assumed
,
我评论了哪里:
struct VehicleInfo
{
int Model;
int WindowTint;
int Kit;
};
template <typename T> stream_perform(std::ofstream& stream, T& what)
{
stream.write(reinterpret_cast<char*>(&what), sizeof(T));
}//error on this line
template <typename T> stream_perform(std::ifstream& stream, T& what)
{
stream.read(reinterpret_cast<char*>(&what), sizeof(T));
}//error on this line
template <typename T> T& stream_op(T& stream, VehicleInfo& info)
{
stream_perform(stream, info.Model);//T int
stream_perform(stream, info.WindowTint);//T int
stream_perform(stream, info.Kit);//T int
//hundreds lines more of variables
return stream;
}
std::ofstream& operator<<(std::ofstream& stream, VehicleInfo& info)
{
return stream_op(stream, info);
}
std::ifstream& operator>>(std::ifstream& stream, VehicleInfo& info)
{
return stream_op(stream, info);
}
我想知道,编译器可以推断出所有类型,所以为什么不能编译它并且它认为没有指定类型?
答案 0 :(得分:2)
我想知道,编译器可以推断出所有类型,所以为什么不能编译它并且它认为没有指定类型?
是没有指定类型:
template <typename T> stream_perform(std::ofstream& stream, T& what)
^^^^
你需要一些东西。我猜你打算写:
template <typename T> void stream_perform(std::ofstream& stream, T& what)