相关疑难解决方法(0)

运算符重载的基本规则和习惯用法是什么?

注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案索引,它们是最有意义的顺序:

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ operator-overloading operators c++-faq

2074
推荐指数
8
解决办法
88万
查看次数

将std :: endl传递给std :: operator <<

在这个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::endlstd::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提供更长的错误消息.

c++ std

2
推荐指数
1
解决办法
114
查看次数

operator <<(ostream&,const BigUnsigned <I>&)必须只接受一个参数

我试图分离模板化类的模板化成员函数的声明和定义,但最终出现以下错误和警告.

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)

c++ templates operator-overloading c++11

2
推荐指数
1
解决办法
1665
查看次数

operator <<必须只取一个参数

我写的类有错误,我不明白是什么问题.

这是工人阶级:

#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)

c++

-1
推荐指数
1
解决办法
1712
查看次数

标签 统计

c++ ×4

operator-overloading ×2

c++-faq ×1

c++11 ×1

operators ×1

std ×1

templates ×1