1.声明变量或函数 但是没有定义。
例如 全局变量 在头文件中声明extern int a,则必须在源文件中定义这个变量 int a;
函数同样如此。
2.传参类型的错误
例如 以下代码
全局函数:double fitnessFuc(Mechanism& Stewart,const vector<double>& PSO_LI);
全局函数的定义:
double fitnessFuc(Mechanism& Stewart,const vector<double>& PSO_Liv)
{
double total_deviation = 0.0;
double deviation;
VectorXd L_actual(6);
VectorXd normalResult(6);
Vector3d angle_deviation(0,0,0);
Vector3d angle_actual;
//将容器中的PSO_Li放到Vector向量中
VectorXd PSO_Li(6);
PSO_Li<<PSO_Liv[0],PSO_Liv[1],PSO_Liv[2],PSO_Liv[3],PSO_Liv[4],PSO_Liv[5];
for(int i = 0;i<NewData.rows();i++)
{
L_actual = NewData.block<1,6>(i,3);//这块位置需要确认一下
angle_actual = NewData.block<1,3>(i,0);//这块也是一样
normalResult = Stewart.NewTonSolveFuc(Stewart.m_T,L_actual,PSO_Li);
angle_deviation = angle_actual-normalResult;
deviation = angle_actual.dot(angle_actual);
total_deviation+=deviation;
if(i==NewData.rows()-1)
{
cout<<"------一个粒子适应函数完成-------"<<endl;
cout<<total_deviation<<endl;
}
}
return total_deviation;
}
在类中Particle的构造函数中引用了这个全局函数:
Particle::Particle(double x_max, double max_vel, double dim,const Mechanism& Stewart)
{
for(int i =0;i<dim;i++) // 初始化粒子的随机位置和速度
{
static std::mt19937 rng;
static std::uniform_real_distribution<double> distribution1(-x_max, x_max);
static std::uniform_real_distribution<double> distribution2(-max_vel, max_vel);
this->m_position.push_back(distribution1(rng));
this->m_vel.push_back(distribution2(rng));
this->best_pos.push_back(0.0); //初始化粒子最优位置
this->fitnessvalue=fitnessFuc(Stewart,m_position);
//this->fitnessvalue = testfuc();
}
}
这个时候会 报fitness函数 和particle的错误 ,原因是在particle函数中的构造函数中传入的参数类型为const Mechanism&类型 而在fitnessFuc中是Mechnism&类型,在fitnessFuc中用const Mechanism&类型是不能在全局函数中引用Mechanism类的函数的,只能取到他的属性,所以当particle中传入const Mechanism& 当在构造函数中调用fitnessFuc,fitnessFuc出现错误。
第三种:
新建的文件代码和原来已经编译好的代码交互出现了错误,导致编译器误报
去文件管理器找到qt的workspace把编译好的文件夹删掉(文件名一般是:build-项目名-Desktop_Qt_5_11_1_MSVC2017_64bit-Debug)
重新编译
其他:有待更新