C++编译出现“无法解析的外部命令”错误提示!
头文件如下:#include<iostream>usingnamespacestd;template<classT>classSeqlist{private:T*elem...
头文件如下:
#include<iostream>
using namespace std;
template <class T>
class Seqlist
{
private:
T*element;
int size;
int len;
public:
Seqlist(int size=64);
Spqlist(T value[],int n);
~Seqlist();
bool isEmpty();
int length();
int get(int i);
bool set(int i,T x);
friend ostream& operator<<(ostream& out,Seqlist<T>& list);
void insert(int i,T x);
void insert(T x); //表后插入
bool remove(int i,T& old); //删除第i个元素存入old中
void clear();
};
template<class T>
Seqlist<T>::Seqlist(int size)
{
this->size=size<64?64:size;
this->element=new T[this->size];
this->len=0;
}
template<class T>
Seqlist<T>::Seqlist(T value[],int n)
{
if(n>0)
{
this->element=new T[2*n]; //Ensure to have enough room to insert
this->size=2*n;
for(int i=0;i<n;i++)
this->element[i]=value[i];
this->length=n;
}
}
template<class T>
Seqlist<T>::~Seqlist()
{
delete[]this->element;
}
template<class T>
bool Seqlist<T>::isEmpty()
{
return len==0;
}
template<class T>
int Seqlist<T>::length()
{
return len;
}
template<class T>
T Seqlist<T>::get(int i)
{
if(i>=0&&i<len)
return element[i];
throw"参数i指定元素无效";
}
template<class T>
bool Seqlist<T>::set(int i,T x)
{
if(i>=0&&i<len)
{
element[i]=x;
return ture;
}
return false;
}
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
template<class T>
void Seqlist<T>::insert(int i,T x)
{
if(len==size)
{
T*temp=element;
element=new T[size*2];
for(int i=0;i<size;i++)
element[i]=temp[i];
size*=2;
}
if(i<0)
i=0;
if(i>len)
i=len;
for(int j=len-1;j>=i;j--)
element[i+1]=element[i];
element[i]=x;
len++;
}
template<class T>
void Seqlist<T>::insert(T x)
{
insert(len,x);
}
template<class T>
bool Seqlist<T>::remove(int i,T&old)
{
if(len>0&&i>=0&&i<len)
{
old=element[i];
for(int j=i;j<len;j++)
element[i]=element[j+1];
len--;
return true;
}
return false;
}
template<class T>
void Seqlist<T>::clear()
{
len==0;
}
主函数部分如下:
#include<iostream>
#include"Seqlist.h"
using namespace std;
void main()
{
char a[]="abcde";
Seqlist<char> a1(a,5);
cout<<a1;
}
如题,本人C++菜鸟,用的是visual studio 2010简体中文旗舰版,以上代码在生成解决方案时出现以下错误提示,请问是什么问题?
1>my1st.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Seqlist<char> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Seqlist@D@@@Z),该符号在函数 _main 中被引用
1>d:\my documents\visual studio 2010\Projects\1st\Debug\1st.exe : fatal error LNK1120: 1 个无法解析的外部命令 展开
#include<iostream>
using namespace std;
template <class T>
class Seqlist
{
private:
T*element;
int size;
int len;
public:
Seqlist(int size=64);
Spqlist(T value[],int n);
~Seqlist();
bool isEmpty();
int length();
int get(int i);
bool set(int i,T x);
friend ostream& operator<<(ostream& out,Seqlist<T>& list);
void insert(int i,T x);
void insert(T x); //表后插入
bool remove(int i,T& old); //删除第i个元素存入old中
void clear();
};
template<class T>
Seqlist<T>::Seqlist(int size)
{
this->size=size<64?64:size;
this->element=new T[this->size];
this->len=0;
}
template<class T>
Seqlist<T>::Seqlist(T value[],int n)
{
if(n>0)
{
this->element=new T[2*n]; //Ensure to have enough room to insert
this->size=2*n;
for(int i=0;i<n;i++)
this->element[i]=value[i];
this->length=n;
}
}
template<class T>
Seqlist<T>::~Seqlist()
{
delete[]this->element;
}
template<class T>
bool Seqlist<T>::isEmpty()
{
return len==0;
}
template<class T>
int Seqlist<T>::length()
{
return len;
}
template<class T>
T Seqlist<T>::get(int i)
{
if(i>=0&&i<len)
return element[i];
throw"参数i指定元素无效";
}
template<class T>
bool Seqlist<T>::set(int i,T x)
{
if(i>=0&&i<len)
{
element[i]=x;
return ture;
}
return false;
}
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
template<class T>
void Seqlist<T>::insert(int i,T x)
{
if(len==size)
{
T*temp=element;
element=new T[size*2];
for(int i=0;i<size;i++)
element[i]=temp[i];
size*=2;
}
if(i<0)
i=0;
if(i>len)
i=len;
for(int j=len-1;j>=i;j--)
element[i+1]=element[i];
element[i]=x;
len++;
}
template<class T>
void Seqlist<T>::insert(T x)
{
insert(len,x);
}
template<class T>
bool Seqlist<T>::remove(int i,T&old)
{
if(len>0&&i>=0&&i<len)
{
old=element[i];
for(int j=i;j<len;j++)
element[i]=element[j+1];
len--;
return true;
}
return false;
}
template<class T>
void Seqlist<T>::clear()
{
len==0;
}
主函数部分如下:
#include<iostream>
#include"Seqlist.h"
using namespace std;
void main()
{
char a[]="abcde";
Seqlist<char> a1(a,5);
cout<<a1;
}
如题,本人C++菜鸟,用的是visual studio 2010简体中文旗舰版,以上代码在生成解决方案时出现以下错误提示,请问是什么问题?
1>my1st.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Seqlist<char> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Seqlist@D@@@Z),该符号在函数 _main 中被引用
1>d:\my documents\visual studio 2010\Projects\1st\Debug\1st.exe : fatal error LNK1120: 1 个无法解析的外部命令 展开
2个回答
展开全部
#include<iostream>
using namespace std;
template <class T>
class Seqlist
{
private:
T*element;
int size;
int len;
public:
Seqlist(int size=64);
Seqlist(T value[],int n);
~Seqlist();
bool isEmpty();
int length();
T get(int i);
bool set(int i,T x);
template <class Type>
friend ostream& operator<<(ostream& out,Seqlist<Type>& list);
void insert(int i,T x);
void insert(T x); //表后插入
bool remove(int i,T& old); //删除第i个元素存入old中
void clear();
};
template<class T>
Seqlist<T>::Seqlist(int size)
{
this->size=size<64?64:size;
this->element=new T[this->size];
this->len=0;
}
template<class T>
Seqlist<T>::Seqlist(T value[],int n)
{
if(n>0)
{
this->element=new T[2*n]; //Ensure to have enough room to insert
this->size=2*n;
for(int i=0;i<n;i++)
this->element[i]=value[i];
this->len=n;
}
}
template<class T>
Seqlist<T>::~Seqlist()
{
delete[]this->element;
}
template<class T>
bool Seqlist<T>::isEmpty()
{
return len==0;
}
template<class T>
int Seqlist<T>::length()
{
return len;
}
template<class T>
T Seqlist<T>::get(int i)
{
if(i>=0&&i<len)
return element[i];
throw"参数i指定元素无效";
}
template<class T>
bool Seqlist<T>::set(int i,T x)
{
if(i>=0&&i<len)
{
element[i]=x;
return true;
}
return false;
}
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
{
out<<list.element;
return out;
}
template<class T>
void Seqlist<T>::insert(int i,T x)
{
if(len==size)
{
T*temp=element;
element=new T[size*2];
for(int i=0;i<size;i++)
element[i]=temp[i];
size*=2;
}
if(i<0)
i=0;
if(i>len)
i=len;
for(int j=len-1;j>=i;j--)
element[i+1]=element[i];
element[i]=x;
len++;
}
template<class T>
void Seqlist<T>::insert(T x)
{
insert(len,x);
}
template<class T>
bool Seqlist<T>::remove(int i,T&old)
{
if(len>0&&i>=0&&i<len)
{
old=element[i];
for(int j=i;j<len;j++)
element[i]=element[j+1];
len--;
return true;
}
return false;
}
template<class T>
void Seqlist<T>::clear()
{
len==0;
}
int main()
{
char a[]="abcde";
Seqlist<char> a1(a,6);
cout<<a1;
return 0;
}
改成这样就没问题了,主要有2个问题。
1.定义一般模板友元关系时 应该如下定义
template <class Type>//这里是重点 这句话一定要加 并且与外面的template <class T>不一致
//这是上面提示错误的主要原因
friend ostream& operator<<(ostream& out,Seqlist<Type>& list);
2.这个函数你并没有给出具体定义 我按着大概思路写了一个 具体你自己改
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
{
out<<list.element;
return out;
}
你的程序还有很多小的问题,根据编译器提示一点一点改就行了。
希望帮到了你!
using namespace std;
template <class T>
class Seqlist
{
private:
T*element;
int size;
int len;
public:
Seqlist(int size=64);
Seqlist(T value[],int n);
~Seqlist();
bool isEmpty();
int length();
T get(int i);
bool set(int i,T x);
template <class Type>
friend ostream& operator<<(ostream& out,Seqlist<Type>& list);
void insert(int i,T x);
void insert(T x); //表后插入
bool remove(int i,T& old); //删除第i个元素存入old中
void clear();
};
template<class T>
Seqlist<T>::Seqlist(int size)
{
this->size=size<64?64:size;
this->element=new T[this->size];
this->len=0;
}
template<class T>
Seqlist<T>::Seqlist(T value[],int n)
{
if(n>0)
{
this->element=new T[2*n]; //Ensure to have enough room to insert
this->size=2*n;
for(int i=0;i<n;i++)
this->element[i]=value[i];
this->len=n;
}
}
template<class T>
Seqlist<T>::~Seqlist()
{
delete[]this->element;
}
template<class T>
bool Seqlist<T>::isEmpty()
{
return len==0;
}
template<class T>
int Seqlist<T>::length()
{
return len;
}
template<class T>
T Seqlist<T>::get(int i)
{
if(i>=0&&i<len)
return element[i];
throw"参数i指定元素无效";
}
template<class T>
bool Seqlist<T>::set(int i,T x)
{
if(i>=0&&i<len)
{
element[i]=x;
return true;
}
return false;
}
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
{
out<<list.element;
return out;
}
template<class T>
void Seqlist<T>::insert(int i,T x)
{
if(len==size)
{
T*temp=element;
element=new T[size*2];
for(int i=0;i<size;i++)
element[i]=temp[i];
size*=2;
}
if(i<0)
i=0;
if(i>len)
i=len;
for(int j=len-1;j>=i;j--)
element[i+1]=element[i];
element[i]=x;
len++;
}
template<class T>
void Seqlist<T>::insert(T x)
{
insert(len,x);
}
template<class T>
bool Seqlist<T>::remove(int i,T&old)
{
if(len>0&&i>=0&&i<len)
{
old=element[i];
for(int j=i;j<len;j++)
element[i]=element[j+1];
len--;
return true;
}
return false;
}
template<class T>
void Seqlist<T>::clear()
{
len==0;
}
int main()
{
char a[]="abcde";
Seqlist<char> a1(a,6);
cout<<a1;
return 0;
}
改成这样就没问题了,主要有2个问题。
1.定义一般模板友元关系时 应该如下定义
template <class Type>//这里是重点 这句话一定要加 并且与外面的template <class T>不一致
//这是上面提示错误的主要原因
friend ostream& operator<<(ostream& out,Seqlist<Type>& list);
2.这个函数你并没有给出具体定义 我按着大概思路写了一个 具体你自己改
template <class T>
ostream& operator<<(ostream& out,Seqlist<T> &list)
{
out<<list.element;
return out;
}
你的程序还有很多小的问题,根据编译器提示一点一点改就行了。
希望帮到了你!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-12-09
展开全部
你给我QQ好我给你发一个
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询