C++模板类重载"<<"未定义错误
2016-02-23 21:33
288 查看
在使用C++的模板类进行编程的时候,重载"<<"运算符时,如果定义不当,会出现未定义的情况,错误为LNK2019。
这个问题的原因是由于C++的模板编译机制造成的,解决问题的方式是在类中声明<<运算符时,需要在运算符和参数之间的位置,添加类似<T>标识,具体如下:
template<typename T_Vertex, typename T_Edge>
class CMatrixGraph
{
friend ostream & operator<<
<T_Vertex, T_Edge> (ostream &os, CMatrixGraph<T_Vertex, T_Edge> &g);
.......
}
template<typename T_Vertex, typename T_Edge>
ostream &operator<<(ostream &os, CMatrixGraph<T_Vertex, T_Edge> &g)
{
int nVertexNum = g.GetVertexNum();
for (int i = 0; i < nVertexNum; ++i)
{
for (int j = 0; j < nVertexNum; ++j)
{
os << g.GetEdgeAt(i, j) << ' ';
}
os << endl;
}
return os;
}
重新编译,错误消失。
这个问题的原因是由于C++的模板编译机制造成的,解决问题的方式是在类中声明<<运算符时,需要在运算符和参数之间的位置,添加类似<T>标识,具体如下:
template<typename T_Vertex, typename T_Edge>
class CMatrixGraph
{
friend ostream & operator<<
<T_Vertex, T_Edge> (ostream &os, CMatrixGraph<T_Vertex, T_Edge> &g);
.......
}
template<typename T_Vertex, typename T_Edge>
ostream &operator<<(ostream &os, CMatrixGraph<T_Vertex, T_Edge> &g)
{
int nVertexNum = g.GetVertexNum();
for (int i = 0; i < nVertexNum; ++i)
{
for (int j = 0; j < nVertexNum; ++j)
{
os << g.GetEdgeAt(i, j) << ' ';
}
os << endl;
}
return os;
}
重新编译,错误消失。
相关文章推荐
- 兔子问题 素数 水仙花数 三个经典C程序的解答 C知识回顾第一天
- CPP操作符重载
- A a和A *a = new A()区别
- C++编译器之间的不同性能
- 数组指针和指针数组
- C++基础知识面试30题
- C++链表的创建与操作
- C++面向对象编程<九>:面向对象-类之间的关系
- C语言实现某年某月某日是某年的第几天
- C语言实现某年某月某日是某年的第几天
- C语言实现某年某月某日是某年的第几天
- YTU 2443: C++习题 复数类--重载运算符3+
- YTU 2442: C++习题 矩阵求和--重载运算符
- YTU 2441: C++习题 复数类--重载运算符2+
- C语言可变参实现参数累加返回
- C语言可变参实现参数累加返回
- 关于C和C++一些大神们的讨论
- 深入浅出C++构造函数、析构函数、深浅拷贝的相关内容
- C语言可变参实现参数累加返回
- 关于C和C++一些大神们的讨论