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 个无法解析的外部命令 展开
# 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 个无法解析的外部命令 展开
2个回答
展开全部
函数原型和实现的函数参数类型由现在的传值改为引用就可以了:
void ass(vector<vector<double> > &a,vector<double> &f,int nu,int ib)
因为传值在函数体内操作的是副本,这样函数体重没有错,但是并没有改变main函数中的内容,main中的a自然就越界了
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);
这句话要怎么改动呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询