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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++关于模板类引用作为返回值的问题
跟着《C++程序设计原理与实践》编写vector容器的模板实现,在编写vector的拷贝函数时出现了该函数未定义的问题,rn在模板类vector中该函数定义如下:rnvector& operator=(const vector&); rn//改成vector& operator=(const vector&); 也不行弹出的错误代码是一样的 rnrn该函数声明如下:rnvector& vector::operator=(const vector& v)rnrn if(this == &v) return *this;rn if(v.sz <= sp) rn for(int i=0; i v(2);rnvector v21;rn# v = v2; //问题就出现在这了~rnrn错误代码如下:rn“对‘vector::operator=(vector const&)’未定义的引用 ”rnrn//为什么vector源码中没有对'='的重载呢?rnrn使用g++11编译的,希望能获得大神的解答,谢谢啦
指针和引用作为返回值
一、 函数返回值      1.如果返回值小于4byte 用寄存器eax带回返回值      2.如果返回值大于4byte小于8btye,用两个寄存器eax edx带回返回值      3.如果返回值大于8byte,在调用前main函数中产生临时量接受返回值  二、临时量生成的三种情况      1.函数调用之前产生,目的是为了接受函数的返回值      2.函数的return语句处      ...
引用作为返回值的
1. 返回引用的函数实际上是被引用的变量的别名 1,在作为函数参数和函数的返回值的引用free_throws & accmulate(free_throws & target, const free_throws & source) { target.attempts += source.attempts; target.made += source.made; s
引用作为函数的返回值
这是怎么回事啊,求解答rn用类类型的引用作为函数的返回值,函数如下,函数体就不写了rnforward_list & fun(forward_list lst, string str1, string str2)rn然后有如下的函数调用,rnforward_list l,m;rnm=fun(l, "hy", "love");rn这样是合法的吗,VS2013编译能通过,可是要想输出m的元素时却会引发中断,为什么呢
引用作为函数返回值
函数返回值时,要生成一个值的副本。而用引用返回值时,不生成值的副本。   例如,下面的程序是有关引用返回的4种形式:     //*********************     //**   ch9_6.cpp  **     //*********************     #include     float temp;     float fn1(flo
C/C++ 引用作为函数的返回值
C/C++ 引用作为函数的返回值 2018年08月04日 13:19:48 Jeff_ 阅读数:1202 语法:类型 &amp;amp;函数名(形参列表){ 函数体 } 特别注意: 1.引用作为函数的返回值时,必须在定义函数时在函数名前将&amp;amp; 2.用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本   //代码来源:RUNOOB #include&amp;lt;i...
关于C 指针作为返回值的问题
最近在看尹成老师的 C 语言,这个视频应该算是目前来说最好的教程了,在此谢谢尹大神。 在学习删除字符时,想自己写个有返回值类型的函数,即调用此函数删除字符,并列把字符串的指针返回给主调函数。结果我就写下了面的代码,悲剧也就此开始... /* 删除字符 这段是后面注的:函数也可以返回指向外部变量或指向声明为static的局部变量的指针。 永远不要返回指向自动局部变量的指针: 一旦 d
函数指针的引用作为返回值,可以作为右值
1.函数指针引用作为参数,改变函数指针的执行代码:2.通过返回一个函数指针的引用,改变指针指向代码:
引用作为返回值的一些规则
引用作为返回值的一些规则引用作为返回值的一些规则引用作为返回值的一些规则
C++ 把引用作为返回值
http://www.runoob.com/cplusplus/returning-values-by-reference.html   通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。 当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面这个简单的程序: #includ...
模板类作为形参的问题
[code=C/C++]rnostream& operator<<(ostream &out, const Num &n)rnrn out<
关于局部变量作为返回值的问题
例:[code=Java]rnpublic int getAInt()rn int a = 4;//局部变量,基本类型,创建在栈上rn return a;rnrn//在此方法运行结束后,该方法的栈应该被消除了rn//那么返回的是什么呢?rn[/code]
关于指针作为返回值
一个函数的返回值是一个指针可以吗?rn请举个例子rn需要注意些什么?rn
~~请教~~关于引用返回值的问题~~
比如:rn GETLIST_L(LIST L,int i,int e)rn 与rn GETLIST_L(LIST L,int i,int &e)有什么区别rn  int e 在返回的时候是被主函数复制,而int &e是被主函数直接提取。但这二者的区别在哪?
关于用“引用”返回值的问题
对于用引用返回值的问题我不是很懂,也不知道它的好处:比如下例:rn#include rn#include "stdio.h"rn#include rnrnclass CharArray rnpublic:rn CharArray(int l) rn length = l;rn buff = new char[length];rn rn ~CharArray() rn delete buff;rn rn int getLength() rn return length;rn rn char & operator[](int i);rnrnprivate:rn int length;rn char *buff;rn;rnrnchar & CharArray::operator [](int i) rn static char ch = 0;rn if(i < length && i >= 0) rn return buff[i];rn rn else rn cout<<"\nIndex out of range.";rn return ch;rn rnrnrnvoid main() rn int cnt;rn CharArray string1(6);rn char *string2 = "string";rn for(cnt = 0; cnt < 8; cnt++) rn string1[cnt] = string2[cnt];rn rn cout<<"\n";rn for(cnt = 0; cnt < 8; cnt++) rn cout<
关于在引用中返回值的问题
在返回类型为引用的函数中,要求其返回类型应为静态变量或全局变量。因为函数运行结束后,其中的局部变量已经销毁。不过一般不设为局部变量也可以,只是给出一个警告。为什么?rn 在普通的函数中,如返加局部变量,其中的局部变量也已经销毁,但这没什么警告。为什么?谢谢。
模板类中成员函数的返回值问题?
template class MyClass rnprivate:rn vector list;rnpublic:rn T GetValue(int index)rn rn if(index < 0 || index >= list.size()) return ???; // 这里到底应该返回什么值呢?rn else return list.at(index);rn rn;rnrn上面的代码中,???这个地方应该怎么写呢?rn
C如何将二维数组作为返回值
做大作业遇到这样一个问题:在子函数里申请了一个二维数组,在主函数里要用到二维数组里的数据,但是在主函数里又不能提前申请(因为不知道数组长度),所以需要将数组return得到。    子函数:float ** SURFCompare(Mat srcImage1, Mat srcImage2)//注意子函数返回值为float ** { ... float **point;//定义二维指针
关于引用返回值?
Matrix& grow(Matrix* p)rn Matrix *res;rn //在动态存储中分配一个更大的Matrixrn //res是指向新Matrix的指针rn //将*p内容复制到*resrn return *res;rnrn声明的返回值不是Matrix&这样一个引用(或指向Matrix的指针)吗?为什麽返回一个*res具体的值?是不是应该返回res?Matrix&在这里应该看成返回一个Matrix的引用还是Matrix的地址?rn
关于返回值引用
#includernusing namespace std;rnint a=3;rnint &f(int i)rnrn return i;rnrnint main()rnrn f(a)=1;//我想知道这个1赋给了谁?我用的返回值引用不产生副本(临时变量)rn cout<
关于引用的返回值
rn在对操作符重载时,四则运算是不能返回引用的。rnrn看到一个这样的解释:rn(5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。它们不能返回引用,Effective C++[1]的Item23详细的讨论了这个问题。主要原因是这四个操作符没有side effect,因此,它们必须构造一个对象作为返回值,可选的方案包括:返回一个对象、返回一个局部变量的引用,返回一个new分配的对象的引用、返回一个静态对象引用。根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。静态对象的引用又因为((a+b) == (c+d))会永远为true而导致错误。所以可选的只剩下返回一个对象了。rnrn请问文中的:rn 静态对象的引用又因为((a+b) == (c+d))会永远为true而导致错误。rn如何理解,请方便的话给出代码解释,谢谢!rn
C和java中将数组作为返回值的问题
在写c的时候,发现如果要返回一个数组,只能返回它的首指针,并且要定义成静态变量,而在java中,我发现不需要定义成static,就能直接返回,而在c中必须要定义成静态,否则会出现获取不到值的问题,在网上查资料说,这是局部变量,会被释放,而在java中,为什么不会被释放?请大佬指教。rn[code=c]rnchar * day_name(int n)rn static char name[8][20] = rn "illegal Day","MonDay","TuesDay","WednesDay","ThursDay","FriDay","SaturDay","SunDay"rn ;rn return (n<1||n>7)?name[0]:name[n];rnrn[/code]rn
C语言--局部变量作为指针返回值的问题
代码: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; int* getStu(int x, int y) {         int i = x+y;         return &amp;amp;i; } int main() {         int x = 2, y = 3;         int *s = getStu(x, y);...
引用相关知识,普通引用,常引用,引用作为参数,引用作为返回值等等
引用概念:引用不是新定义一个变量,而是给以存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,引用和它所引用的变量共用同一块内存空间。 引用的特性:1.引用在定义时必须初始化                      2.一个变量可以有多个引用                      3.引用一旦绑定了一个实体,就不能再成为其他变量的引用 如图即可知道abcd表示同一块空间
16.引用指针以及作为函数参数返回值
尹成老师带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯、黑客劫持技术、网络安全、加密解密,以及各种精彩的小项目等,非常适合大家学习!
16引用指针以及作为函数参数返回值
尹成老师带你步入C++语言基础的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以C++语言为核心,完整精彩的演练了C++语言操作流程以及各种精彩的小项目等,提高竞赛能力,非常适合同学们学习!
什么时候需要将引用作为返回值
将引用作为函数返回值类型的格式如下所示: 类型标识符 & 函数名(形参列表及类型说明){// 函数体} 将引用作为返回值的优点是:在内存中不产生被返回值的副本,从而大大提高了程序的安全性和效率。 具体而言,将引用作为函数函数返回值类型的格式一般要注意一下4点内容: 1) 当返回一个引用时,要注意被引用的对象不能超出作用域。所以不能返回局部变量的引用。但是可以返回一个静态变量的引用。
引用值作为函数的返回值的困惑
///////////////////////////////////////////////////////rndouble array[5] = 100.1, 100.2, 100.3, 100.4, 100.5;rndouble cd = 5.2;rnrndouble &change(int i)rnrn return array[i];rnrnrnvoid TestConstReturnVaulefun()rnrn rn int i;rnrn cout<<"原始值如下: ";rn for(i = 0; i < 5; i++)rn cout << array[i] <<" ";rn cout<
跟我一起学C++之引用作为返回值
1.引用的另一个作用是用于返回引用的函数 2.函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边。 3.注意:不能返回对局部变量的引用。   代码实例: #include usingnamespace std; // 引用作为函数返回值 int a[] = {0,1,2,3,4}; int& index(inti) { retur
函数式编程、Lambda作为方法参数和返回值、方法引用
1.1 函数式编程: 1.2 Lambda表达式的延迟执行: 使用Lambda表达式的主要原因是:将代码的执行延迟到一个合适的时间点。所有的Lambda表达式都是延迟执行的。 因为有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而lambda表达式是延迟执行的,这正好作为解决方案,提升性能。 1.3 性能浪费的日志案例:  Lambda特点:延迟执行==&amp;gt;需要的时...
aidl引用类作为函数的返回值
项目中要编写aidl,为另外一个进程提供本app接受到的一些数据,将这些数据封装为一个对象后作为返回值。 1.aidl对应的目录如下 2.对应的类的代码: IBufferPlay.aidl package lenovo.com.ismartvlive.aidl; //导包 import lenovo.com.ismartvlive.aidl.BufferPlayInfo; int
++++参数作为返回值问题++++
求如下三个C语言函数,自己写的函数几次调用返回的值都有点问题,晕了! rnrnint FnTest1(char *A,char *B) rnint FnTest2(char *A,char **B) rnint FnTest3(char *A,char *&B) rnA:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度 rnrn假设将以上三个函数封装成动态库XYZ.dll,则VC调用的形式,请给列出 ; rn实现和调用共3对,每对30分,共90分。谢谢!
函数参数 作为返回值 问题
以下函数有点不太明白 没这样用过 请教rnINT32 encrypt(UINT8 *Src,UINT32 SrcLen,UINT8 *Dst,UINT32 *Dst_Len,UINT8 *Key,UINT8 Encryt_Mode)rnrn UINT32 a,b;rn a=TASK_CMD_ENCRYPT_ID;rn b=ENCRYPT_HANDLE_SIG;rnrn af.Par1=Src;rn af.Par2=&SrcLen;rn af.Par3 =Dst;rn af.Par4 =Dst_Len;rn af.Par5=Key;rn af.Par6=&Encryt_Mode;rn return(APP_all_use(&a, &b));rnrn参数1为源数据,2为源数据长度rn3为加密结果指针 4为加密结果长度指针 //?可以这样描述否rn5为密钥 6为加密模式(DES 3DES等(flag))rnrn问题 参数3 和4 未加密之前 我如何传值,传空的指针>? 我现在调用这个函数之后 结果返回0(失败)和1(成功)rn我判断成功之后 如何拿到加密后数据 即 如何接收加密结果?
CArray作为返回值的问题
提示错误如下:rnrror C2558: class 'CArray' : no copy constructor available
vector作为返回值的问题
大家好:rnrn遇到一个问题:rnvoid init(void) rn float *a = new float[10];rn floar *b = new float[5];rnrnvector func(void)rnrn return vector(a,b);rnrnrnvector out = func();rnrn我的问题是这个func返回的是什么?是一个什么类型的返回值最后给了out这个vector?rnrn其实是在看caffe的代码的时候关于std::vector Classifier::Predict(const cv::Mat& img)函数这个函数的返回值,不能理解rnrn望高手解答rn谢谢
指针作为返回值问题
又来求大佬解题了[face]monkey:2.gif[/face][face]monkey:2.gif[/face],一个是想问对*s的下一位赋值正确吗?(就是*(s+1)='\0'),一个是为什么会显示不出后面的字符串?最近指针进阶学得有点乱,求大佬们指导指导。[img=https://img-bbs.csdn.net/upload/201906/14/1560443497_793514.png][/img][img=https://img-bbs.csdn.net/upload/201906/14/1560443498_512704.png][/img][img=https://img-bbs.csdn.net/upload/201906/14/1560443499_28911.png][/img]
& 操作符作为返回值的问题
“引用(&)将指向调用该操作符的对象”rn上面这句话怎么理解捏?举以下3个例rn[code=C/C++]rn//例一rnint name1=5;rnint & name2=name1;//我知道的是“name2”自此为name1的别名rn//例二rnvoid funtion1 (int& x)//“引用(&)将指向调用该操作符的对象”---是不是就理解为指向temp 的"int*"指针?rn ####### ;rnint main()rnrn int temp=6;rn function1(temp);rn;rn//例三rnclass Arnrn private:rn int varrn public :rn A& function2 (A&);rn rnrnA& A::function2 (A&s)//这里的&怎么理解捏rn#######;rn[/code]
C指针作为函数参数引用
C指针作为函数参数引用
关于接口作为方法返回值
我看到有方法的返回值是一个接口的用法,谁能帮详细讲解一下这种用法,谢谢!
关于vector作为函数的返回值
vector fun()rnrn vector vect1;rn object *p1=new object(); rn object *p2=new object();rn vect1.push_back(*p1);rn vect1.push_back(*p2);rn return vect1; rnrnmain()rnrn vector vect=fun();rnrnrn//请问此时main调用fun后,之前给分配的那块堆中内存释放了吗? 因为在函数内部需要返回。我无法手动rn调用delete 去删除那两个vector中的两个元素。又怕内存会泄露,请问我应该怎么办?
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview