c++中当vector为函数参数时的赋值问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中当vector为函数参数时的赋值问题。相关的知识,希望对你有一定的参考价值。
程序如下:
# 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 个无法解析的外部命令
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);
这句话要怎么改动呢?
以上是关于c++中当vector为函数参数时的赋值问题。的主要内容,如果未能解决你的问题,请参考以下文章
C++ 【错误求帮改】构造函数、析构函数,delete等编程时的问题