使用重载<

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我想在朋友重载运算符<班级在这里:

#ifndef FOR_FUN_TESTCLASS_HPP
#define FOR_FUN_TESTCLASS_HPP

#include <utility>
#include <vector>
#include <string>
#include <ostream>

class TestClass {

public:
    TestClass(uint32_t i, std::string s, std::vector<uint32_t> v) : i_(i), s_(std::move(s)), v_(std::move(v)) {}

    friend std::ostream &operator<<(std::ostream &os, const TestClass &aClass) {
        os << "i_: " << aClass.i_
        << " s_: " << aClass.s_
        << " v_: " << aClass.v_; //compiler error
        return os;
    }

private:
    uint32_t i_ {0};
    std::string s_;
    std::vector<uint32_t> v_ {};
};

#endif //FOR_FUN_TESTCLASS_HPP

但是当我调用main方法时,它不会编译

TestClass tc { 1, "one", {1,2,3}};
std::cout << tc << std::endl;

这是因为运算符<

错误:错误:运算符不匹配<

我不想使用for运算符进行迭代,我正在寻找一个明智的解决方案,即在ostream中复制矢量内容?

我想在朋友重载运算符<< [##&&...

c++ c++14
1个回答
1
投票
这将完成工作:

friend std::ostream &operator<<(std::ostream &os, const TestClass &aClass) { os << "i_: " << aClass.i_ << " s_: " << aClass.s_ << " v_: "; for(auto it : aClass.v_) os << it<<' '; return os; }

© www.soinside.com 2019 - 2024. All rights reserved.