在模板类中实现 >> 和 << 运算符的重载

2024-01-12

我正在尝试编写函数定义,以在类定义之外重载运算符“>>”和“

1>Source.obj : error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class MyClass<int> &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$MyClass@H@@@Z) referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class MyClass<int>)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@V?$MyClass@H@@@Z) referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class MyClass<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$MyClass@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@@Z) referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class MyClass<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@V?$MyClass@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@@Z) referenced in function _main

我和这个人一起在河上漂流过。奇怪的是,如果我将它们的定义写在类定义中,它就可以完美地工作。

#include <iostream>
#include <string>
using namespace std;

template <class MYTYPE>
class MyClass {
    MYTYPE *myVector;
    int dim;
    string name;
public:
    MyClass(int, string);
    MyClass() {};
    friend istream& operator>>(istream&, MyClass<MYTYPE>&);
    friend ostream& operator<<(ostream&, MyClass<MYTYPE>);
};

template <class MYTYPE>
MyClass<MYTYPE>::MyClass(int x, string y) {
    dim = x;
    name = y;
    myVector = new MYTYPE[dim];
}


template <class MYTYPE>
istream& operator>>(istream& X, MyClass<MYTYPE>& a){
    cout<<"Reading vector: "<<a.name<<endl;
    for(int indice = 0; indice < a.dim; indice++){
        cout<<a.name<<'['<<indice<<"]= ";
        X >> a.myVector[indice];
    }
    return X;
}

template <class MYTYPE>
ostream& operator<<(ostream& X, MyClass<MYTYPE> a){
    X<<"Vector: "<<a.name<<endl;
    for(int indice = 0; indice < a.dim; indice++)
        X<<a.myVector[indice]<<' ';
        X<<endl;
    return X;
}


int main() {
    MyClass<int> object(4, "Ints vector");
    MyClass<string> object2(5, "String vector");
    cin >> object;
    cin >> object2;
    cout << object;
    cout << object2;
    system("pause");
    return 0;
}

在您的代码中,友元运算符的声明MyClass应该看起来像这样:

template<typename T> friend istream& operator>>(istream&, MyClass<T>&);
template<typename T> friend ostream& operator<<(ostream&, MyClass<T>);

也就是说,它们应该有自己的模板参数。

A valid的定义MyClass基于问题中提供的内容如下:

template <class MYTYPE>
class MyClass { 
    MYTYPE *myVector;
    int dim;
    string name;
public:
    MyClass(int, string);
    MyClass() {}

    template<typename T>
    friend istream& operator>>(istream&, MyClass<T>&);

    template<typename T>
    friend ostream& operator<<(ostream&, MyClass<T>);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在模板类中实现 >> 和 << 运算符的重载 的相关文章

  • 更改 Visual Studio 2015 扩展中项目内的文件 ProjectItem 的内容?

    如何更改文件的内容 ProjectItem在给定的范围内Project 我想用字符串替换它的所有内容 这个问题有解决办法吗 我想做一些改变ProjectItem CS 文件 通过使用 VSIX 包 以及我现在看到的唯一一种执行此操作的方法
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 如何在函数中将结构成员作为指针传递?

    问题是我有一个结构是另一个 主要 结构的成员 我编写了一个函数来清除第一个结构 它需要一个指向结构的指针 我想使用该函数来清除主要结构内的结构 但我不确切知道哪种方法是正确的 为了更好地解释它 这里有一些代码 我有一个结构 定义为 type
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • ASP .NET MVC 5 - 客户地址一对一关系

    我在这里查看了论坛 实际上发现了一些类似的问题 但不是相同的问题 类似的解决方案没有给我正确的答案 我正在使用实体框架和代码优先方法来处理 ASP NET MVC 5 我想建立客户 gt 地址一对一关系的模型 我建模的是 客户等级 publ
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 为什么 CMake 不通过在定义该变量之前创建的 CMAKE_CXX_STANDARD 将语言标准编译标志添加到目标?

    我在用着cmake version 3 22 1 and c Ubuntu 11 3 0 1ubuntu1 22 04 11 3 0 以及非常简约的CMakeLists txt 我无法让 CMAKE 使用 C 20 Setting set
  • 将 Uploadify 与 Sharepoint 和 .net 结合使用

    我在共享点页面上有一些由 JQuery 生成的 html 我想在这个 html 中使用 uploadify 将文件上传到服务器 亚历山大 https stackoverflow com users 25427 alexander gyosh
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • 是否有更好(更简单)的方法来获取特定域 SID?

    我被指派修改 WinForms 应用程序 主要检查登录用户是否属于特定域 这是我到目前为止所想出的 byte domainSid var directoryContext new DirectoryContext DirectoryCont
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • 带缓存的简约 PHP 模板引擎,但不带 Smarty?

    有大量的问题 https stackoverflow com search q php template engine cache寻找 正确的 PHP 模板引擎 但它们都不专注于缓存 有谁知道一个轻量级 高质量 基于 PHP 5 的模板引擎
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • 在 C# 4.0 中,是否可以从泛型类型参数派生类?

    我一直在尝试这个 但我似乎无法弄清楚 我想做这个 public abstract class SingletonType
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • System.Drawing.Icon 构造函数抛出“操作成功完成”异常

    在 Windows XP 计算机上 以下代码抛出 System ComponentModel Win32Exception 并显示消息 操作成功完成 System Drawing Icon icon new System Drawing I
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • 第一个随机数始终小于其余随机数

    我碰巧注意到 在 C 中 使用 std rand 方法调用的第一个随机数大多数时候都明显小于第二个随机数 关于 Qt 实现 第一个几乎总是小几个数量级 qsrand QTime currentTime msec qDebug lt lt q
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果

随机推荐

  • 在 aws athena 中按日期时间查询解析 alb 日志时出错

    我已按照链接中提到的步骤在 Athena 中创建 ALB 表 我试图根据日期时间查询日志 但出现以下错误 Query SELECT client ip sum received bytes FROM default alb logs WHE
  • Java JTextArea KeyListener

    当我按下 ENTER 时 我的 JTextArea 开始一个新行 我只想对 doClick 方法执行其他操作 我该怎么做呢 textarea addKeyListener new KeyListener Override public vo
  • 在 AWS CloudFront 上启用 POST/PUT/DELETE?

    在 AWS CloudFront 中 我在 默认缓存行为设置 区域中的 允许的 HTTP 方法 中进行了设置 GET HEAD OPTIONS PUT POST PATCH DELETE 我的 CloudFront 链接到 AWS S3 存
  • 带有 .htaccess 的 HTTP 缓存标头

    我正在尝试配置我的 htaccess 文件来设置缓存时间 尝试了所有可能的配置 但没有任何效果 这是我的 HTML 中写的内容 这是我的 htaccess 文件中写入的内容 ExpiresActive On ExpiresDefault A
  • Python:从列表中删除奇数

    我编写了一个函数来从列表中删除奇数 如下所示 def remove odd l for i in l if i 2 0 l remove i print l return l remove odd 4 5 4 remove odd 4 5
  • 在 java(w).exe 进程列表中查找 .jar 的名称

    在我的公司环境中 这个脚本在大量计算机上运行 我偶尔会要求用户杀死该脚本 因为众所周知它有时会锁定 我正在想办法自己杀死它 我注意到我可以使用远程列出pslist然后使用杀死它pskill 现在的问题是 当有人运行多个 java 应用程序
  • 转换为自动引用计数 (ARC):“使用未声明的标识符”错误

    在一个非常大的项目中 我到处都使用了自动合成的属性 MyClass h file interface MyClass NSObject property nonatomic retain NSString deviceName proper
  • 如何直接从 UIWebView 将登录信息传递到网站而不需要再次登录?

    我想使用 UIWebView 在我的 iPhone 应用程序中打开一些网站 该网站需要用户名和密码 我有这些用户名和密码 我想知道是否可以在 UIWebView 中打开网站而无需任何登录屏幕 我的意思是 因为我已经有了用户名和密码 我可以使
  • 如何防止 Java 中出现 403 HTTP 错误代码?

    我使用简单的代码来获取htmlhttp www ip adress com http www ip adress com 但它显示错误http代码403 我在其他网站 例如google com 的程序中尝试过 它可以工作 我也可以在浏览器中
  • 如何使用 R formattable 包更改表标题行的外观

    我正在使用 R 中的 formattable 包来生成 HTML 表 我可以使用格式化程序来自定义表中数据值的外观 例如字体大小 颜色等 但我不知道如何更改表标题行的外观 我可以使用 col names 更改实际的列名称 但无法更改它们的外
  • 在java中获取模式值

    有人知道如何从数组中获取模式值吗 例如 如果我有一个数字不同的数组 我如何使用Java来查找出现次数最多的数字 完成时间为 O n 而不是 O n 2 需要长度 gt 0 的数组 public static int getMode int
  • 在 GDB 中创建 C++ 字符串

    我在创建时遇到问题std string 或者任何 C 对象 我猜 在 GDB 中 我尝试了以下多种变体 但似乎都不起作用 gdb p std string hello A syntax error in expression near he
  • 迭代 json 对象来绘制柱形图?

    I use google load visualization 1 packages columnchart google setOnLoadCallback drawChart function drawChart response al
  • NodeJS 中用于 API 的存根 DynamoDB

    我在存根 DynamoDB 调用以进行 API 测试时遇到问题 我正在使用无服务器摩卡 想要从端到端的角度测试我的 API 项目结构并不简单 但在 API 文件本身内部 我对不同的类文件进行了单独的调用 以实际使用 DynamoDB 函数
  • malloc: *** 对象错误: 未分配被释放的指针 *** 在 malloc_error_break 中设置断点进行调试

    有人可以帮我弄清楚我在哪里收到此错误吗 我知道这可能是双重删除或类似的事情 对于背景 这是霍夫曼树的实现 您可以轻松地实现维基百科 http en wikipedia org wiki Huffman coding CharCountNod
  • 仅在底部 UIView 上设置阴影

    我想在 UIView 上创建仅底部的阴影 现在使用此功能 将在顶部 底部 左侧和右侧创建阴影 func setCardView view UIView view layer masksToBounds false view layer sh
  • 动画后如何保持样式? [复制]

    这个问题在这里已经有答案了 我正在制作一个作品集 以便在我申请下一次学习时展示 由于我们生活在 2012 年 它有大量精美的动画和 CSS3 垃圾 只是为了给他们 我们需要这个家伙 的感觉 我现在遇到一个小问题 这是特定元素的一小部分 Th
  • System.InvalidOperationException:Android 上全局不支持 PushAsync

    我正在关注这个 Xamarin Forms快速入门指南 https developer xamarin com guides xamarin forms getting started hello xamarin forms multisc
  • 1052: 字段列表中的列“id”不明确

    我有2张桌子 tbl names and tbl section它同时具有id场在他们之中 我该如何选择id字段 因为我总是收到此错误 1052 Column id in field list is ambiguous 这是我的查询 SEL
  • 在模板类中实现 >> 和 << 运算符的重载

    我正在尝试编写函数定义 以在类定义之外重载运算符 gt gt 和 1 gt Source obj error LNK2019 unresolved external symbol class std basic istream