超载插入和提取操作员作为模板
Overloading Insertion and Extraction Operators as Templates
我试图在模板中以类的过载和iStream作为班级的过载。我已经在网上看,但找不到有关模板过载的太多指定,我所看到的似乎是指出这是用于载入这些模板的方法。很明显,我对编程非常陌生,并感谢任何帮助。谢谢。
#include <stdio.h>
#include<vector>
#include<iostream>
using namespace std;
template<class T>
class MyClass
{
enter code here
public:
MyClass();
MyClass(const T& p_val1);
MyClass(const MyClass<T>& p_val1);
~MyClass();
MyClass<T>& operator=(MyClass<T>& rhs);
friend ostream& operator<<(ostream& lhs, const MyClass<T> &printme);
friend istream& operator>><T>(istream& lhs, MyClass<T>& readme);
private:
T* m_val1;
};
实现Ostream和Istream。
template<class T>
ostream& operator<<(ostream&lhs, const MyClass<T>& printme)
{
lhs << printme.m_val1;
return lhs;
}
template<class T>
istream& operator>>(istream& lhs, MyClass<T>& readme)
{
lhs >> *(readme.m_val1);
return lhs;
}
这是错误
Undefined symbols for architecture x86_64:
"MyClass<int>::~MyClass()", referenced from:
_main in main.o
"operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, MyClass<int> const&)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
主要功能
MyClass<int> a(8);
MyClass<int> b(9);
cout << " Enter a value for the two types to be swapped: ";
cin >> a >> b;
cout << "Before swapping...n";
cout << "Object a's pointer member dereferences a value of:t" << a << endl;
cout << "Object b's pointer member dereferences a value of:t" << b << endl;
您正在声明您的操作员,但没有定义它们。模板定义与类内部的定义无关,因为它们的原型不同,因此链接错误。更改您的声明:
template <typename T, typename Trait>
friend std::basic_ostream<T, Trait>&
operator<< (std::basic_ostream<T, Trait>& out, const MyClass& c)
{
return out << c.my_val1;
}
template <typename T, typename Trait>
friend std::basic_istream<T, Trait>&
operator>> (std::basic_istream<T, Trait>& in, MyClass& c)
{
return in >> *(c.my_val1);
}
请注意,它使用的是std::basic_ostream
和std::basic_istream
,其类型和类型特征。它允许使用所有流,不仅是std::ostream
和std::istream
。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 有效地使用std::unordered_map来插入或增加键的值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 难以使我的插入操作员过头
- STD :: MAP-使用下标操作员与插入方法添加元素
- 防止操作员被插入弦线中
- 通过索引操作员插入boost :: program_options :: variables_map
- 超载插入和提取操作员作为模板
- 超载预先插入操作员未显示正确的结果
- Visual C 构建器图案插入操作员`&lt;&lt;`样式
- 插入运算符重载有什么问题?(<<操作员)
- C++ 插入<<操作员过载