使用流模板来避免代码复制会产生“错误C4430:缺少类型说明符 - 假设为int”

时间:2015-07-24 03:09:56

标签: c++ templates

我正在尝试编写一个模板,用于从/向文件读取/写入结构。

为了避免愚蠢的错误,我想保留一份读/写逻辑 - 而不是两个独立的读/写功能中的两个副本。

但截至目前我已获得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);
}

我想知道,编译器可以推断出所有类型,所以为什么不能编译它并且它认为没有指定类型?

1 个答案:

答案 0 :(得分:2)

  

我想知道,编译器可以推断出所有类型,所以为什么不能编译它并且它认为没有指定类型?

没有指定类型:

template <typename T>      stream_perform(std::ofstream& stream, T& what)
                      ^^^^

你需要一些东西。我猜你打算写:

template <typename T> void stream_perform(std::ofstream& stream, T& what)