gpt4 book ai didi

c++ - 重载运算符的顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:42 27 4
gpt4 key购买 nike

我有两个重载 << 运算符的实例,它始终默认为下面显示的第一个,有什么方法可以让自定义类 Shape 识别第二个函数吗?

谢谢,

约翰

第一次重载:

    template <class T>
ostream & operator << (ostream & out, vector <T> & vec)
{
for (unsigned int i = 0;i<vec.size()-1; i++) {
out << vec[i] << " ";
}
out << vec[vec.size() - 1];

return out;
}

第二次重载:

    ostream & operator << (ostream & out, vector <Shape> & vec)
{
for (unsigned int i = 0;i<vec.size(); i++)
{
out << "##" << vec[i].get_shape_type << i << endl << vec[i] << endl;
}
return out;
}

编辑 2012 年 7 月 25 日:

我在同一个文件中添加了

    #ifndef _UTILS_H_
#define _UTILS_H_
#include <iostream>
#include <vector>
#include <algorithm>
#include "Shape.H"

using namespace std;

template <class T>
ostream & operator << (ostream & out, vector <T> & vec)
{
for (unsigned int i = 0;i<vec.size()-1; i++) {
out << vec[i] << " ";
}
out << vec[vec.size() - 1];

return out;
}

template <class Shape>
ostream & operator << (ostream & out, vector <Shape> & vec)
{
for (unsigned int i = 0;i<vec.size(); i++)
{
out << "## " <<vec[i];
}
return out;
}
#endif

然后尝试编译,但我得到了这个错误

../include/utils.H:22:11: 错误:重新定义‘template std::ostream& operator<<(std::ostream&, std::vector&)’../include/utils.H:11:11: 错误:‘template std::ostream& operator<<(std::ostream&, std::vector&)’ previously declared here

最佳答案

您的两个函数具有相同的名称和签名。只有模板参数名称(T、SHAPE)不同。这就是编译器提示您正在重新定义相同函数的原因。您需要使签名不同或添加 std::enable_if

关于c++ - 重载运算符的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11635154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com