C++ << 运算符重载,导致无法解析的外部命令

代码不长,只是表示意思:

<头文件header.h>
#include<iostream>
using namespace std;

template<class T>
class A {
friend ostream& operator << (ostream &out,const A<T> &x);
private:
T data1;
T data2;
public:
A(T a1,T a2) {
data1=a1;
data2=a2;
}
};

template<class T>
ostream& operator << (ostream &out,const A<T> &x) {
cout << x.data1 << x.data2 << endl;
return *this;
}

<源文件test.cpp>

#include"header.h"

int main() {
cout << "haha" << endl;
A<int> a(99,999);
cout << a << endl;
system("pause");
return 0;
}

---------------------------------------------------

请问这是怎么回事???

ostream& operator << (ostream &out,const A<T> &x) {
cout << x.data1 << x.data2 << endl;
return *this;
}
修改为
ostream& operator << (ostream &out,const A<T> &x) {
out << x.data1 << x.data2 << endl; //
return out; //
}追问

还是报错啊,error LNK2019: 无法解析的外部符号 "class std::basic_ostream > & __cdecl operator > &,class A const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$A@H@@@Z),该符号在函数 _main 中被引用

追答

#include
#include
using namespace std;

template class A;
template ostream& operator &x);

template
class A {
friend ostream& operator (ostream &out,const A &x);
private:
T data1;
T data2;
public:
A(T a1,T a2) {
data1=a1;
data2=a2;
}
};

template
ostream& operator &x) {
out a(99,999);
cout << a << endl;
system("pause");
return 0;
}

追问

呃。。。你运行试过没?

这些代码我反正换了几个IDE都编不过

追答

这是我 已经测试过的,你用了什么编译器?错误是什么?

追问

VS2010,错误仍是error LNK 2019,我贴了你的代码,过补了啊?

追答

你别用你原来的修改,直接新建一个cpp
文件,将我的代码,贴上去使用,不要分为两个文件。我是用GCC,测试通过的。

温馨提示:内容为网友见解,仅供参考
无其他回答

C++ << 运算符重载,导致无法解析的外部命令
ostream& operator << (ostream &out,const A<T> &x) { cout << x.data1 << x.data2 << endl;return *this;} 修改为 ostream& operator << (ostream &out,const A<T> &x) { out << x.data1 << x.data2 << endl; \/\/ return out; \/\/ } ...

c++ fatal error LNK1120: 4 个无法解析的外部命令
你有很多函数没有定义,却使用到了。你的代码没有给全,没办法给你指出错误。

C++定义运算符重载后使用,提示没有与这些操作数匹配的运算符
使用cout为了不能改变类的属性,必须加const,把头文件和实现部分改为 friend ostream & operator<<(ostream & os,const 类名称 &co);

C++运算符+=的重载,编译失败no match for 'operator=' in 's3 = ope...
你+的返回值是一个临时变量 把这个临时变量的引用作为=的参数,这个可能有问题的。

【C++】常见二义性问题(更新中)
多重继承时,如果没有显式指定虚函数,调用将遵循最近祖先的实现。这可能导致调用的不确定性,引发虚函数调用的二义性。通过使用作用解析运算符或在派生类中重新定义,可以有效解决这个问题。掌握这些常见二义性问题,你将更好地驾驭C++的复杂性,让代码更加清晰和可靠。在实践中不断学习和改进,你的编程...

c++关于运算符重载的问题
1 char &operator[](int i);\/\/请说明此行的&是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &charArray::operator[](int i)\/\/&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个...

C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
原因是:+,-,*等返回不了引用,比如+运算符,可以如下重载(为了简单,假设A 只有int x;int y)A operator+(A a,A b) {A sum; sum.x=a.x+b.x; sum.y=a.y+b.y; return sum; } 分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己...

c++中运算符(\\" << \\")重载ostream&是什么意思
运算符重载,是对现有操作符使用于自定义用户类型的一种扩展,但具体的性质不能变,如<<表示流操作符左侧对象为流的本质不能变,+为两元操作符本质不能变,再如,对于->重载必须返回指针类型不可变!即,即使进行运算符重载,也只是有限自由!friend ostream & operator << (ostream &os, const C...

请教c++运算符重载程序报错原因
这可能是编译器的原因。有些低版本的编译器,除了在类中申明友元关系之外,还要在类定义前对函数进行前向声明。如:Class Time;Time& operator++(Time& a);Time operator++(Time& a,int);ostream& operator<<(ostream& o,const Time& t);如果你用的是vc6.0的话就会出现这种情况。虽然重载运算...

关于C++重载运算符
(二) C++允许重载的运算符C++中绝大部分的运算符允许重载.不能重载的运算符只有5个:(1) 成员访问运算符.(2) 作用域运算符∷ (3) 条件运算符?:(4) 成员指针运算符 (5) 编译预处理命令的开始符号 (三) 重载不能改变运算符运算对象(即操作数)的个数。(四) 重载不能改变运算符的优先级别...

相似回答
大家正在搜