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);
...
}