c++中当vector为函数参数时的赋值问题。

程序如下:#include<cstdlib>#include<iostream>#include<iomanip>#include<stdio.h>#include<ma... 程序如下:

# include <cstdlib>
# include <iostream>
# include <iomanip>
# include <stdio.h>
# include <math.h>
# include <vector>

using namespace std;

int main ();

void ass(vector<vector<double>> a,vector<double> f,int nu,int ib);

//***************************************************
int main()
{
vector<vector<double>> a;
vector<double> f;

int nu=15;
int ib=2;
ass(a,f,nu,ib);
cout<<"In the main(), the ass matrix is "<<endl;
cout<<a[3][3];

return 0;
}

//****************************************

void ass(vector<vector<double>> a,vector<double> f,int nu,int ib)
{
for (int i=0;i<nu;i++)
{
f.push_back(0);
}

int ib1=ib+1;
int ibt=ib+ib1;

vector<double> line;
for (int j=0;j<nu;j++)
{
a.push_back (line);
for (int i=1;i<=ibt;i++)
{
a[j].push_back(0);
}
}

// cout<<"nu is "<<nu;
// cout<<endl;
// cout<<"ibt is "<<ibt;
// cout<<endl;

for (int j=0;j<nu;j++)
{
for (int i=0;i<ibt;i++)
{
a[j][i]=j+1;
}
f[j]=j+1;
}

cout<<"the ass matrix is "<<endl;
for (int j=0;j<nu;j++)
{
for (int i=0;i<ibt;i++)
{
cout<<a[j][i]<<'\t';
}
cout<<endl;
}
return;
}

运行后发现:直接在ass()中可以得到a的值,但是在main()中会提示越界的错误。

请问是什么问题呢?
ass的定义改为void ass(vector<vector<double> > &a,vector<double> &f,int nu,int ib) 后,报错如下:
1>vectortest.obj : error LNK2019: 无法解析的外部符号 "void __cdecl ass(class std::vector<class std::vector<double,class std::allocator<double> >,class std::allocator<class std::vector<double,class std::allocator<double> > > >,class std::vector<double,class std::allocator<double> >,int,int)" (?ass@@YAXV?$vector@V?$vector@NV?$allocator@N@std@@@std@@V?$allocator@V?$vector@NV?$allocator@N@std@@@std@@@2@@std@@V?$vector@NV?$allocator@N@std@@@2@HH@Z),该符号在函数 _main 中被引用
1>C:\Users\XXXX\Documents\Visual Studio 2008\Projects\structure\Debug\structure.exe : fatal error LNK1120: 1 个无法解析的外部命令
展开
 我来答
chiconysun
2011-05-23 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2578万
展开全部
函数原型和实现的函数参数类型由现在的传值改为引用就可以了:
void ass(vector<vector<double> > &a,vector<double> &f,int nu,int ib)

因为传值在函数体内操作的是副本,这样函数体重没有错,但是并没有改变main函数中的内容,main中的a自然就越界了
追问
请问当我把void ass改为void ass(vector > &a,vector &f,int nu,int ib) 
后,当我在main()中调用的时候应该怎么用呢?
即:
ass(a,f,nu,ib);
这句话要怎么改动呢?
理想之芽
2011-05-23 · TA获得超过212个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:81.8万
展开全部
按chiconysun说的就可以了,其他的不需要改动
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式