当前位置: 首页 > 知识库问答 >
问题:

使用重载

蒋永宁
2023-03-14

我想打印友元重载运算符中的向量值

课堂在这里:

#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中的向量内容?

共有1个答案

韶浩博
2023-03-14

这将完成这项工作:

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;
}

住在戈德博尔特。

或带有副本:

std::copy(aClass.v_.begin(), aClass.v_.end(),
                   std::ostream_iterator<uint32_t>(std::cout, ' '));

住在戈德博尔特。

 类似资料:
  • 问题内容: 假设我有以下重载函数 为什么要调用带有参数签名的方法?这里重载的优先顺序是什么? 问题答案: 在这种情况下,类层次结构中较低的类将具有优先权。换句话说,更具体的类类型,在这种情况下将是因为从技术上扩展了。 如果您有以下内容 然后,当您定义如下的重载方法时: 然后调用将调用第二个方法,因为它在类层次结构中较低。

  • 我已经验证了@transaction方法是否正确放置,并且在调试堆栈中,我看到事务拦截器和实体管理器是根据对后端的请求创建的(因此没有guice持久性过滤器) 我的感觉表明问题在于会话上下文。我感觉(但我不能真正理解)它在多个请求上重用了我的持久性上下文。 我已经把一些框架放在一起,使这一切都能工作。我使用resteasy作为jax的实现者。guice(4.0beta4)作为cdi实现者,hibe

  • 问题内容: 这将无法编译: 这将编译并工作: 第一个和第二个示例非常相似。首先使用varargs,第二个不使用。为什么一个有效,第二个无效。7是原始的,因此在两种情况下都应调用第二种方法。这是正常行为吗? 我找到了: 错误报告 堆栈溢出 问题答案: 这是正在发生的情况的高层非正式摘要。 首先,varargs语法实际上只是传递数组的语法加糖。所以实际上是要传递一个…数组。 但是数组是什么?这里有两个

  • 问题内容: 该代码无法编译,编译器说f含糊。但是我认为第二种方法可以解决什么问题? 问题答案: 这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。 Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。 在这种情况下,基本上将char扩展为浮动。 Java基元的扩展顺序为:

  • 问题内容: 谁能告诉我为什么我的重定向助手无法按我期望的方式工作?我正在尝试重定向到我的主控制器的index方法,但是当它路由到时需要我。这对任何人有意义吗?我将配置中的索引页设置为空白,尽管我不认为这是问题所在。有人对如何解决此问题有建议吗?提前致谢! 控制器 : .htaccess : 问题答案: URL助手 代码点火器中的redirect语句使用重定向标头语句将用户发送到指定的网页。 该语句

  • 问题内容: 我正在尝试使用以下方法重定向到另一条路线: 但是由于某种原因,它不起作用。我使用jQuery- UI做了一个自动完成的小部件,一旦用户选择了一个选项,我就从作用域调用了一个函数。我调试了它,然后它进入了函数,但它从未重定向到其他路由。当我按下一个键时,它只会改变路线。 我认为这很奇怪,但是我还没有弄清楚如何解决这个问题。我用了 它可以工作,但我想使用该功能。 有人知道为什么会这样吗?