如何return vector

chenfeibiao328 2011-11-22 10:52:13
我在头文件里面申明了:
一个vector<string> m_vector;
一个返回vector<string>类型的方法vector<string> GetMyVector();

然后在源文件里面实现vector<string> GetMyVector();方法如下:
vector<string> GetMyVector()
{
return m_vector;
}

目的是为了模拟C#中的属性。
居然报错,真是郁闷了,相当郁闷,这是怎么回事,C++这个地方太奇怪了,气死我了
错误如下:
“std::vector<_Ty>::vector(const std::vector<_Ty> &)”: 不能将参数 1 从“std::vector<_Ty>”转换为“const std::vector<_Ty> &”

牛人在解决问题之后最好能说下C++中return 的原理。
...全文
332 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenfeibiao328 2011-11-22
  • 打赏
  • 举报
回复
错误如下:
“std::vector<_Ty>::vector(const std::vector<_Ty> &)”: 不能将参数 1 从“std::vector<_Ty>”转换为“const std::vector<_Ty> &”

也就说 “std::vector<_Ty>::vector(const std::vector<_Ty> &)”: 中的_TY和下面那个_TY是不同的。一个是string,一个是CString,不过为了感谢大家回复,我的会给大家鼓励分的
chenfeibiao328 2011-11-22
  • 打赏
  • 举报
回复
很不好意思。事实上应该是CString,也就是把CString和string混合使用了,都是因为长期做C#的原因,呵呵。。。。好像MFC中没string这种类型。
qscool1987 2011-11-22
  • 打赏
  • 举报
回复
“std::vector<_Ty>”转换为“const std::vector<_Ty> &”
根据这句提示可以知道,类型转换错误,你定义的返回类型和你要返回的类型不能转换,试试把const去掉
Snight 2011-11-22
  • 打赏
  • 举报
回复
报错和你这里面已贴出来的代码没有直接关系,贴全些吧。

你这里的return 就是将对象拷贝一份(调用拷贝构造函数)副本并返回。

还有你这么 return vector 是不合适的。
返回引用不会生成副本。
vector<string>& GetMyVector()
{
return m_vector;
}
sky_heart_zhang 2011-11-22
  • 打赏
  • 举报
回复
Test.h中定义:

#include <string>
#include <vector>

vector<string> m_vector ;

vector<string> GetMyVector() ;


Test.cpp中定义

#include "Test.h"

vector<string> GetMyVector()
{
return m_vector;
}
void main()
{
vector<string> m_vector1 = GetMyVector() ;
}


编译环境VS2010,编译没有问题。

函数这么写虽然很少见,但是应该也符合语法规则,不明白楼主为啥会出现这样的问题。
irshinning 2011-11-22
  • 打赏
  • 举报
回复
typedef verctor<string> stringvec;
stringvec m_vector;
stringvec GetMyVector()
{
return m_vector;
}
试试,不行的话我也爱莫能助了
cnmdbd 2011-11-22
  • 打赏
  • 举报
回复
const vector<string>& GetMyVector()
{
return m_vector;
}

这样????
irshinning 2011-11-22
  • 打赏
  • 举报
回复
将verctor<string> typedef 成 stringvec;
然后返回stringvec;
liutengfeigo 2011-11-22
  • 打赏
  • 举报
回复
如果你是女的。我就加。
测试NULL 2011-11-22
  • 打赏
  • 举报
回复
你是像下面这样写的吗?


#include <iostream>
#include <vector>
#include <string>
using namespace std;

vector<string> m_vector;
vector<string> GetMyVector();

int main()
{
m_vector.push_back("123");
m_vector.push_back("456");

vector<string> v = GetMyVector();

for(int i=0; i<v.size(); i++)
{
cout << v[i] << endl;
}
return 0;
}

vector<string> GetMyVector()
{
return m_vector;
}
chenfeibiao328 2011-11-22
  • 打赏
  • 举报
回复
回答后,如果答案正确。最好能加我QQ:623041460 。不仅仅给分,还给QQ秀或者其他奖励噢
chenfeibiao328 2011-11-22
  • 打赏
  • 举报
回复
8楼确实是正确的说法,非常好。我这个问题虽然只是针对那个错误原因,错误原因是CString和string混用了。但是即使改了这个错误,使用我的方法还是有性能问题的。C++的对象都是值类型,使用引用不仅安全且高效。所以8楼的说法给了我很好的启示。刚入门C++,以后还靠大家多多关照。12楼力举正确答案,人才啊。2楼加了我QQ并帮我解答了其他问题,我不仅给分还给了QQ秀。呵呵,谢谢大家了
pinel 2011-11-22
  • 打赏
  • 举报
回复
LZ理解错了,8楼正解!所以不建议LZ这样的代码。错误提示就是拷贝构造函数,参数是const.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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