关于C++ 中编译链接错误LNK20XX 可能的原因总结

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)
重新编译

其他:有待更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值