相关疑难解决方法(0)

当重载operator <<时,std :: endl是未知类型

我重载了运算符<<

template <Typename T>
UIStream& operator<<(const T);

UIStream my_stream;
my_stream << 10 << " heads";
Run Code Online (Sandbox Code Playgroud)

工作但是:

my_stream << endl;
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

错误C2678:二进制'<<':找不到哪个运算符带有'UIStream'类型的左操作数(或者没有可接受的转换)

my_stream << endl工作的工作是什么?

c++ stl operator-overloading

58
推荐指数
4
解决办法
2万
查看次数

可变参数模板函数:没有匹配的函数,用于调用std :: endl

在我的代码中,我使用可变参数模板函数进行日志记录.但是当我std::endl用作参数时,我得到以下编译器错误:

错误:没有匹配函数来调用'LOG_ERROR(const char [14],int&,)'LOG_ERROR("sum of x + y =",z,std :: endl);

注意:候选人:'void LOG_ERROR()'内联void LOG_ERROR(){

注意:候选人需要0个参数,3个提供

我的代码:

#include <iostream>

inline void LOG_ERROR() { 
    std::cout << std::endl;
}

template<typename First, typename ...Rest>
void LOG_ERROR(First && first, Rest && ...rest){
    std::cout << std::forward<First>(first);
    LOG_ERROR(std::forward<Rest>(rest)...);
}

int main() {
    int foo=40;
    LOG_ERROR("My foo = ", foo, std::endl);
}
Run Code Online (Sandbox Code Playgroud)

代码工作得很好,"\n"但我很想知道它为什么失败std::endl以及如何解决它

c++ variadic-templates c++11

7
推荐指数
3
解决办法
631
查看次数