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);
这句话要怎么改动呢?

参考技术A 按chiconysun说的就可以了,其他的不需要改动

以上是关于c++中当vector为函数参数时的赋值问题。的主要内容,如果未能解决你的问题,请参考以下文章

C++ 【错误求帮改】构造函数、析构函数,delete等编程时的问题

c++,类的对象作为形参时一定会调用复制构造函数吗?

C++ vector 作为函数参数的问题

python 调用 C++的DLL,函数参数是数组怎么处理?

C++学习-vector容器构造函数以及赋值

C++ 构造函数中的变量声明和赋值