体系结构x86_64的未定义符号:错误

时间:2018-07-12 13:47:58

标签: c++

因此,我在另一个类中创建了一个辅助函数,但该函数无法编译。

这是错误

Undefined symbols for architecture x86_64:
  "move(sc2::Unit const*, sc2::Unit const*)", referenced from:
      Ihurt_Multi_Unit_Bot::OnStep() in battle_simulator.cc.o

我称之为移动功能。

virtual void OnStep()
{   
    Units alive = Observation()->GetUnits();
    for (int i = 0; i<alive.size(); i++)
    {
        if (alive[i]->unit_type == 9)
            enemy = alive[i];

        if ((Observation()->GetGameLoop() % 2) == 0)
        {
            if (alive[i]->unit_type == 48) 
            {
                move(alive[i], enemy);
            }

        }

函数的类

void move(const Unit* unit, const Unit* enemy);

class commands : public Agent 
{
    commands() = default;
    void move(const Unit* unit, const Unit* enemy)
    { 
        Point2D moveto;
        double path = Query()->PathingDistance(unit->pos, enemy->pos);

        if (path < Observation()->GetUnitTypeData()[enemy->unit_type].weapons.front().range) 
        {
            moveto = getBestMove(unit->pos, enemy->pos);
            Actions()->UnitCommand(unit, ABILITY_ID::MOVE, moveto);
        }
    }

1 个答案:

答案 0 :(得分:1)

如果我们将您的代码简化为最少的示例,那么问题可能更明显了:

void move();

class commands
{
public:
   void move()
   {
   }
};

int main()
{
    move();
}

您已经声明并正在调用自由函数move,但仅在move类内定义了方法commands

根据您要达到的目标,有多种解决方法。最好的办法可能只是删除move函数并调用方法:

class commands
{
public:
   void move()
   {
   }
};

int main()
{
    commands cmds;
    cmds.move();
}