【发布时间】:2023-03-16 01:50:02
【问题描述】:
我是 C++ 的初学者。调用期望 std::istream& 的函数的正确方法是什么?
用read(std::cin); 尝试过,但编译器出错。
typedef double Element;
template<typename T>
std::list<T> read(std::istream& i) {
Element input;
std::list<Element> l;
while(i>>input) {
l.push_back(input);
}
return l;
}
【问题讨论】:
-
你的编译器的错误是什么,究竟是什么?调用这个函数的代码到底是什么?无论如何,它可能与
std::istream无关,但与模板参数在这里不可推导的事实有关,但不能在没有看到代码的情况下确定。在 stackoverflow.com 上发布他们的第一个问题之前,每个人都应该采取tour,阅读help center,了解minimal reproducible example 和How to Ask 问题的所有要求。几乎每次都不做这些都会导致质量差的问题。然后它被否决、关闭,然后被删除。 -
你遇到了什么错误?
-
no matching function for call to 'read' 是我得到的错误
-
错误消息继续:
note: candidate template ignored: couldn't infer template argument 'T'。当您编写read(std::cin)时,编译器应该用什么替代T? -
替代解决方案:
template<typename T = Element>。但无论如何,你不应该在read()中混用Element和T。它应该是Element(然后read()将成为常规函数)或T(然后它应该是std::list<T> l;)。