C++关于模板类引用作为返回值的问题

跟着《C++程序设计原理与实践》编写vector容器的模板实现,在编写vector的拷贝函数时出现了该函数未定义的问题,
在模板类vector中该函数定义如下:
vector& operator=(const vector&);
//改成vector& operator=(const vector&); 也不行弹出的错误代码是一样的

该函数声明如下:
vector& vector::operator=(const vector& v)
{
if(this == &v) return this;
if(v.sz <= sp) {
for(int i=0; i<v.sz; i++) elem[i] = v.elem[i];
sz = v.sz;
return *this;
}
T
cp = new T[v.sz];
copy(v.elem, v.elem + v.sz, cp);
delete[] elem;
sp = sz = v.sz;
elem = cp;
return *this;
}
Main函数中这样使用的
vector v(2);
vector v2{1};

v = v2; //问题就出现在这了~

错误代码如下:
“对‘vector::operator=(vector const&)’未定义的引用 ”

//为什么vector源码中没有对'='的重载呢?

使用g++11编译的,希望能获得大神的解答,谢谢啦

c++

5个回答

不要定义,函数放到类内部,试下

lxy923
lxy923 应该是“编译器强制运算符=为成员函数”了,可能会造成影响全局=,=确实是个特殊的运算符,细节书里应该有
2 年多之前 回复
Chorzen
Chorzen 放到类内部倒是可以了,不过在类外部该怎么改装呢?我定义都放在.h文件,想要实现和定义分离
2 年多之前 回复
Chorzen
Chorzen 唔,感谢,不过我这的问题并不是对于这个函数的理解问题,应该是怎么把链接里的函数更改为模板类函数的问题了
2 年多之前 回复

vector& operator=(const vector&);
vector::operator=(vector const&)

Chorzen
Chorzen 这试过了,不行会出现 "use of template 'vector' requires template arguments"的错误
2 年多之前 回复

vector& operator=(const vector&);

建议你可以试一下不要用定义 谢谢 望采纳

Chorzen
Chorzen 怀疑是链接时出了问题,只要include<vector.cpp>就好了,但是include<vector.h>就不行了(前者实现,后者定义)
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐