代码不长,只是表示意思:
<头文件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;
}
---------------------------------------------------
请问这是怎么回事???
还是报错啊,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) 编译预处理命令的开始符号 (三) 重载不能改变运算符运算对象(即操作数)的个数。(四) 重载不能改变运算符的优先级别...