C++ 函数 返回 一个动态数组(vector)

yanasdf789 2013-06-26 02:12:36
我想要写一个函数,返回值是一个动态数组(我用一个vector 容器),如何写
有两种方法
一、以 指针的方法
定义:

vector<int> *MyFind()
{
vector<int> *a=new vector<int>;

a->push_back(123);
a->push_back(23);

return a;
}

调用:
	
vector<int> *b=MyFind();
int k=b->size();
delete b ;


二是 利用引用
定义:

void Find(vector<int> &vect)
{
vect.push_back(1);
vect.push_back(3);
vect.push_back(5);

}


调用:
	
vector<int> b;
Find(b);



报同样的错误
错误 1 error LNK2019: 无法解析的外部符号 "public: void __thiscall CMyPointSysApp::Find(class std::vector<int,class std::allocator<int> > &)" (?Find@CMyPointSysApp@@QAEXAAV?$vector@HV?$allocator@H@std@@@std@@@Z),该符号在函数 "public: void __thiscall CMyPointSysApp::sayhello(void)" (?sayhello@CMyPointSysApp@@QAEXXZ) 中被引用


错在哪里啊啊啊 啊
...全文
2676 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
橡木疙瘩 2013-06-26
  • 打赏
  • 举报
回复
引用 6 楼 yanasdf789 的回复:
[quote=引用 3 楼 u010936098 的回复:] 1:参见二楼 2:如果是VC,检查cpp文件是否包含在工程中,是否在“源文件” 子项下 3:选中该文件,查看属性看“从生成中排除”是不是为“否”。 4:检查vector有没有被某个头文件定义成宏。 题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道。 实现时Find函数不要去直接修改vector,应该定义一个vector的局部变量,所有操作都在这个局部变量上进行,最后再用vector.swap交换。
1.题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道? 新手不太明白?怎么改呢? 2.直接返回对象应该效率比较低吧?我想知道 参数引用、指针、对象 哪个方式效率最高,因为我操作的数据量很大?[/quote] 不用改,你的方法二就是。 当然最好这样实现,这样函数可以保证在发生异常时原vect完全不受影响(保持原样)。

void Find(vector<int> &vect)
{
    vector<int>temp;
	temp.push_back(1);
	temp.push_back(3);
	temp.push_back(5);
	temp.swap(vect);
}
我看你有戏 2013-06-26
  • 打赏
  • 举报
回复
楼上的代码没有问题啊,vs2008测试通过 估计是你头文件搞错了
黎明VS黑暗 2013-06-26
  • 打赏
  • 举报
回复
#include<iostream>
#include <vector>
using namespace std;

vector<int> *MyFind()
{
	vector<int> *a=new vector<int>;

	a->push_back(123);
	a->push_back(23);

	return  a;
}

void Find(vector<int> &vect)
{
	vect.push_back(1);
	vect.push_back(3);
	vect.push_back(5);

}


int main()
{
	vector<int> *b=MyFind();
	cout<<b->size()<<endl;
	delete b ;

	system("pause");
	return 0;
}
以上代码没问题! 你注意下在使用某个函数之前一定要声明或者定义就行了! 测试环境VS2010
yanasdf789 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 u010936098 的回复:
1:参见二楼 2:如果是VC,检查cpp文件是否包含在工程中,是否在“源文件” 子项下 3:选中该文件,查看属性看“从生成中排除”是不是为“否”。 4:检查vector有没有被某个头文件定义成宏。 题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道。 实现时Find函数不要去直接修改vector,应该定义一个vector的局部变量,所有操作都在这个局部变量上进行,最后再用vector.swap交换。
1.题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道? 新手不太明白?怎么改呢? 2.直接返回对象应该效率比较低吧?我想知道 参数引用、指针、对象 哪个方式效率最高,因为我操作的数据量很大?
追求执着 2013-06-26
  • 打赏
  • 举报
回复
检查下代码,书写错误!
ri_aje 2013-06-26
  • 打赏
  • 举报
回复
直接返回 vector 对象就行了。
橡木疙瘩 2013-06-26
  • 打赏
  • 举报
回复
1:参见二楼 2:如果是VC,检查cpp文件是否包含在工程中,是否在“源文件” 子项下 3:选中该文件,查看属性看“从生成中排除”是不是为“否”。 4:检查vector有没有被某个头文件定义成宏。 题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道。 实现时Find函数不要去直接修改vector,应该定义一个vector的局部变量,所有操作都在这个局部变量上进行,最后再用vector.swap交换。
rocktyt 2013-06-26
  • 打赏
  • 举报
回复
请检查头文件的声明和代码文件中的定义是否一致
rocktyt 2013-06-26
  • 打赏
  • 举报
回复
无法解析的外部符号 "public: void CMyPointSysApp::Find(vector &)" ,该符号在函数 "public: void CMyPointSysApp::sayhello(void)" 中被引用 你的sayhello函数调用了Find函数,但是Find函数没有定义

64,664

社区成员

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

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