Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;多个运营商>&燃气轮机;匹配这些操作数。操作数类型为:std::ifstream&&燃气轮机&燃气轮机;尺寸“t”;_C++_Serialization_Operator Overloading_Iostream - Fatal编程技术网

C++ &引用;多个运营商>&燃气轮机;匹配这些操作数。操作数类型为:std::ifstream&&燃气轮机&燃气轮机;尺寸“t”;

C++ &引用;多个运营商>&燃气轮机;匹配这些操作数。操作数类型为:std::ifstream&&燃气轮机&燃气轮机;尺寸“t”;,c++,serialization,operator-overloading,iostream,C++,Serialization,Operator Overloading,Iostream,我有一个“可序列化”接口类,它 struct Serializable { virtual void write(std::ostream& os = std::cout) const = 0; virtual void read(std::istream& is = std::cin) = 0; }; 因此,衍生工具的实现可以有一个简单的形式,如: void write(std::ostream& os = std::cout) {os<<

我有一个“可序列化”接口类,它

struct Serializable {
    virtual void write(std::ostream& os = std::cout) const = 0;
    virtual void read(std::istream& is = std::cin) = 0;
};
因此,衍生工具的实现可以有一个简单的形式,如:

void write(std::ostream& os = std::cout) {os<<*this}
void read(std::istream& is = std::cin) {is>>*this}
以及:

或:

std::ifstream&operator>>(std::ifstream-ifs,文档&文档)
{
大小;
ifs>>siz;//II.>>由intellisense加上红色卷曲下划线
文件。设定容量(siz);
...
}
注释II标记的行。就是在这里我得到了我在标题中写的intellisense错误,提到了注释I标记的定义。在其他两个类似的定义中,std::ifstream&>>size\t可能重载

当std::ifstream&>>size\u t显然不是这样的时候,它(或这些)到底是怎么回事


我的设计有什么根本性的错误吗,还是只是一些智能感知的疯狂?

“我得到了智能感知错误”它编译了吗?原因是你重载了
操作符>>()
来处理
std::ifstream
,而不是
std::istream
。在执行
ifs>>size
时,引用
std::ifstream
意味着重载的
操作符>>()
也是候选对象。这是令人困惑的理智。即使您的代码已编译,您也可能会发现您的
read()
函数并不会在任何情况下调用
操作符>()
)。为了消除这个问题(实际上是一系列问题),请让
操作符>>()
使用
std::istream
而不是
std::ifstream
。我的目标是以不同的方式写入控制台和文件,因此如果我调用操作符
std::istream& operator>>(std::istream& is, Vec2D& rhs_vec) {...}
//I.
std::ifstream& operator>>(std::ifstream& ifs, Vec2D& rhs_vec) {...}
//intellisense thinks the above line is an overload for 
//std::ifstream&>>size_t
std::ifstream& operator>>(std::ifstream ifs, Document<Shape>& document) 
{
    size_t siz;
    ifs >> siz; //II. the >> is red curly underlined by intellisense
    document.setCapacity(siz);
    ...
}