一个小白c++问题

qq_36285180 2016-09-30 11:36:33
楼主在做一个c++题目时遇到了困难题目是这个:编程序创建一个类模板,可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。
然后我打的代码:
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class array
{
private:
T *A;
int L;
public:
array(int a);
void datain(T a);
friend array operator+(array<T>&a,array<T>&b);
friend int big(array<T>&a,array<T>&b);
void show();
T average();
~array();
};
template <typename T>
array<T>::array(int a )
{
int c=0;
while(c<a)
{
cin>>A[c];
c++;
}
L=a;
}
template <typename T>
void array<T>::datain(T a)
{
A[L]=a;
}
template <typename T>
int big(array<T>&a,array<T>&b)
{
for(a.L>>=b.L)
return a.L;
else return b.L;
}
template <typename T>
array<T> operator+(array<T>&a,array<T>&b)
{
array c;
int BIG=big(a,b);
for(int i=0;i<BIG;i++)
{c.A[i]=a.A[i]+b.A[i]};
return c;

}
template <typename T>
T array<T>::average()
{
T all=0;
for(int i=0;i<L;i++)
{
all+=A[i];
}
return all/L;
};
template <typename T>
void array<T>::show()
{
for(int i=0;i<L;i++)
cout<<A[i]<<endl;
}
int main()
{
array<int> A1(2);
A1.show();
A1.datain(6);
A1.show();
cout<<A1.average()<<endl;
array<int> B(3);
array<int>C=A1+B;
C.show();
}
然后他运行的时候错误了 2个无法解析的外部命令是怎么回事1>------ 已启动生成: 项目: 9.30, 配置: Debug Win32 ------
1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用
1>源.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall array<int>::~array<int>(void)" (??1?$array@H@@QAE@XZ),该符号在函数 _main 中被引用
1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 2 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
...全文
592 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote]#include <iostream> 我刚才发错了 我改的代码是这个 : 检查好多遍没找错误 泪崩 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(){}; }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote] 那个for其实我是用if来着。。。不过我按照你做的改完了 检查也找不出错误 = =心累 这个是改后的代码 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(); }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];}; return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); } 他的错误还是无法解析的外部命令..
paschen 2016-10-01
  • 打赏
  • 举报
回复
没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 12楼paschen 的回复:
引用 11 楼 qq_36285180 的回复:
[quote=引用 10楼paschen 的回复:]cin>>A[c]; 你的A是个指针,没有分配内存就使用了
对哦。忘记了。。是不是我这个思路就错了 好像也不可以new T啊
数组的话 new T[n] 吧[/quote]貌似不行啊我刚刚试了下
paschen 2016-10-01
  • 打赏
  • 举报
回复
引用 2 楼 qq_36285180 的回复:
[quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下
paschen 2016-10-01
  • 打赏
  • 举报
回复
引用 11 楼 qq_36285180 的回复:
引用 10楼paschen 的回复:
cin>>A[c]; 你的A是个指针,没有分配内存就使用了
对哦。忘记了。。是不是我这个思路就错了 好像也不可以new T啊
数组的话 new T[n] 吧
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 10楼paschen 的回复:
cin>>A[c]; 你的A是个指针,没有分配内存就使用了
对哦。忘记了。。是不是我这个思路就错了 好像也不可以new T啊
paschen 2016-10-01
  • 打赏
  • 举报
回复
cin>>A[c]; 你的A是个指针,没有分配内存就使用了
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
[quote=引用 7 楼 qq_36285180 的回复:] [quote=引用 6 楼 paschen 的回复:] [quote=引用 5 楼 qq_36285180 的回复:] [quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote]#include <iostream> 我刚才发错了 我改的代码是这个 : 检查好多遍没找错误 泪崩 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(){}; }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }[/quote] 不是让你把T换成X,而是让你把那两个函数声明成模板函数,使用另一个模板参数,只是改我发给你那两个函数那里[/quote] 好吧我又按照你那里改了然后他说array<X> c没有合适的默认构造函数 然后我自己就写了个构造函数是这样的:array(){A=0;L=0;} 然后运行成功但是输入到第二个数的的时候程序就终止了。。。。这应该是哪里出了问题?[/quote] 发你现在改好的程序代码及输入的内容来[/quote]这个 #include <iostream> #include <string> using namespace std; template <typename T> class array { private: T *A; int L; public: array(int a); array(){A=0;L=0;} void datain(T a); template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); void show(); T average(); ~array(){}; }; template <typename T> array<T>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <typename T> void array<T>::datain(T a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <typename T> T array<T>::average() { T all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; } template <typename T> void array<T>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }
paschen 2016-10-01
  • 打赏
  • 举报
回复
引用 7 楼 qq_36285180 的回复:
[quote=引用 6 楼 paschen 的回复:] [quote=引用 5 楼 qq_36285180 的回复:] [quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote]#include <iostream> 我刚才发错了 我改的代码是这个 : 检查好多遍没找错误 泪崩 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(){}; }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }[/quote] 不是让你把T换成X,而是让你把那两个函数声明成模板函数,使用另一个模板参数,只是改我发给你那两个函数那里[/quote] 好吧我又按照你那里改了然后他说array<X> c没有合适的默认构造函数 然后我自己就写了个构造函数是这样的:array(){A=0;L=0;} 然后运行成功但是输入到第二个数的的时候程序就终止了。。。。这应该是哪里出了问题?[/quote] 发你现在改好的程序代码及输入的内容来
qq_36285180 2016-10-01
  • 打赏
  • 举报
回复
引用 6 楼 paschen 的回复:
[quote=引用 5 楼 qq_36285180 的回复:] [quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote]#include <iostream> 我刚才发错了 我改的代码是这个 : 检查好多遍没找错误 泪崩 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(){}; }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }[/quote] 不是让你把T换成X,而是让你把那两个函数声明成模板函数,使用另一个模板参数,只是改我发给你那两个函数那里[/quote] 好吧我又按照你那里改了然后他说array<X> c没有合适的默认构造函数 然后我自己就写了个构造函数是这样的:array(){A=0;L=0;} 然后运行成功但是输入到第二个数的的时候程序就终止了。。。。这应该是哪里出了问题?
paschen 2016-10-01
  • 打赏
  • 举报
回复
引用 5 楼 qq_36285180 的回复:
[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 qq_36285180 的回复:] [quote=引用 1 楼 paschen 的回复:] 没有实现析构函数 friend array<T> operator+(array<T>&a,array<T>&b); operator+函数中:array c; 这句没有模板参数啊
我把你说的改了 还是有1个不可解析的外部命令 1>源.obj : error LNK2019: 无法解析的外部符号 "class array<int> __cdecl operator+(class array<int> &,class array<int> &)" (??H@YA?AV?$array@H@@AAV0@0@Z),该符号在函数 _main 中被引用 1>D:\编程文件\9.30\Debug\9.30.exe : fatal error LNK1120: 1 个无法解析的外部命令 请问这个是怎么回事啊?[/quote] 声明和实现时改成这样; template <class X> friend array<X> operator+(array<X>&a,array<X>&b); template <class X> friend int big(array<X>&a,array<X>&b); 不过你代码还有一些小问题,如:for(a.L>>=b.L) 没这种语法,for里面是由3部分组成,里面需要有两个分号 for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i]}; 语句结尾没用分号结尾 可能还有其他,到时楼主自己检查一下[/quote]#include <iostream> 我刚才发错了 我改的代码是这个 : 检查好多遍没找错误 泪崩 #include <iostream> #include <string> using namespace std; template <class X> class array { private: X *A; int L; public: array(int a); void datain(X a); friend array<X> operator+(array<X>&a,array<X>&b); friend int big(array<X>&a,array<X>&b); void show(); X average(); ~array(){}; }; template <class X> array<X>::array(int a ) { int c=0; while(c<a) { cin>>A[c]; c++; } L=a; } template <class X> void array<X>::datain(X a) { A[L]=a; } template <class X> int big(array<X>&a,array<X>&b) { if(a.L>>=b.L) return a.L; else return b.L; } template <class X> array<X> operator+(array<X>&a,array<X>&b) { array<X> c; int BIG=big(a,b); for(int i=0;i<BIG;i++) {c.A[i]=a.A[i]+b.A[i];} return c; } template <class X> X array<X>::average() { X all=0; for(int i=0;i<L;i++) { all+=A[i]; } return all/L; }; template <class X> void array<X>::show() { for(int i=0;i<L;i++) {cout<<A[i]<<endl;} } int main() { array<int> A1(2); A1.show(); A1.datain(6); A1.show(); cout<<A1.average()<<endl; array<int> B(3); array<int>C=A1+B; C.show(); }[/quote] 不是让你把T换成X,而是让你把那两个函数声明成模板函数,使用另一个模板参数,只是改我发给你那两个函数那里

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧