注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案的索引,它们是最有意义的顺序:
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
在这个Stack Overflow回答中,
它表示与之std::cout << "Hello World!" << std::endl;相同
std::operator<<(std::operator<<(std::cout, "Hello World!"), std::endl);
Run Code Online (Sandbox Code Playgroud)
但是当我编译上面的代码行时,它不会编译!然后尝试别的东西后,我发现,它不会编译的原因是因为std::endl,如果我取代std::endl的"\n",然后它工作.但为什么你不能传递std::endl给std::operator<<?
或者更简单,是不是std::cout<<std::endl;一样std::operator<<(std::cout, std::endl);?
编辑
编译时icpc test.cpp,错误消息是
error: no instance of overloaded function "std::operator<<" matches the argument list argument types are: (std::ostream, <unknown-type>) std::operator<<(std::cout, std::endl);
并g++ test.cpp提供更长的错误消息.
我试图分离模板化类的模板化成员函数的声明和定义,但最终出现以下错误和警告.
template <typename I>
class BigUnsigned{
const size_t cell_size=sizeof(I);
std::vector<I> _integers;
public:
BigUnsigned();
BigUnsigned(I);
friend std::ostream& operator<<(std::ostream& out, const BigUnsigned& bu);
};
std::ostream& operator<<(std::ostream& out, const BigUnsigned& bu){
for (auto integer : bu._integers){
out<<integer<<std::endl;
}
return out;
}
Run Code Online (Sandbox Code Playgroud)
../hw06/bigunsigned.h:13:77:警告:朋友声明'std :: ostream&operator <<(std :: ostream&,const BigUnsigned&)'声明一个非模板函数[-Wnon-template-friend]的朋友std :: ostream&operator <<(std :: ostream&out,const BigUnsigned&bu); ^ ../hw06/bigunsigned.h:13:77:注意:(如果这不是你想要的,请确保已经声明了函数模板,并在函数名后添加<>)../hw06/bigunsigned .h:16:51:错误:无法使用模板名称'BigUnsigned'而没有参数列表std :: ostream&operator <<(std :: ostream&out,const BigUnsigned&bu){^ ../hw06/bigunsigned.h :在函数'std :: ostream&operator <<(std :: ostream&,const int&)':../ hw06/bigunsigned.h:17:28:error:请求'bu'中的成员'_integers',这是非类型'const int'的表达式(auto integer:bu._integers){^
当我加入这样的声明和定义时,一切都很好.
template <typename I>
class BigUnsigned{
const size_t cell_size=sizeof(I); …Run Code Online (Sandbox Code Playgroud) 我写的类有错误,我不明白是什么问题.
这是工人阶级:
#ifndef __Worker__
#define __Worker__
#include <iostream>
#include <string>
class Worker{
protected:
std::string name;
int id;
int salary;
public:
Worker(const std::string& name, int id, int salary);
Worker(const Worker& worker );
friend std::ostream& operator<<(std::ostream& os, const Worker& w);
int getWorkerID(){
return this->id;
}
int getsSalary(){
return this->salary;
}
std::string getname(){
return this->name;
}
};
#endif
Run Code Online (Sandbox Code Playgroud)
这是这个类的实现:
#include "Worker.hpp"
Worker::Worker(const std::string &names, int ids, int salarys) :
name(names), id(ids), salary(salarys)
{
}
Worker::Worker(const Worker &worker):
name(worker.name), id(worker.id), salary(worker.salary)
{
}
std::ostream& …Run Code Online (Sandbox Code Playgroud)