You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++机器人移动函数报错求助:表达式错误与调用不匹配

问题描述

项目目标:让用户输入要创建的机器人数量并命名,之后可通过机器人名称(唯一标识)在X-Y轴上移动机器人,本质是修改机器人的.Xvalue或.Yvalue值。

目前MenuFunction可正常运行,但MoveFunction存在问题:希望该函数询问用户要操作的机器人,遍历RobotArray找到后打印其名称。

出现两个编译错误:

main.cpp:42:33: error: expected primary-expression before ‘]’ token
42 | string MoveFunction(RobotArray[], robotName, NumberOfRobots);

main.cpp:62:16: error: no match for call to ‘(std::string {aka std::__cxx11::basic_string}) ()’
62 | MoveFunction();

不清楚第一个错误的解决方法,猜测第二个错误是函数调用未传参,但不知道该传入什么参数。完整代码如下:

#include <iostream>
using namespace std;

struct userRobot
{
    string name;
    int Xvalue = 0;
    int Yvalue = 0;
};

void MenuFunction()
{
    cout << "Welcome to MultiRobo Guider." << endl;
    cout << "Please select:" << endl;
    cout << "m - move" << endl << "d - distance" << endl << "q - quit" << endl << endl;
}

int main()
{

    int NumberOfRobots;
    string robotName;
    cout << "Enter the number of robots" << endl;
    cin >> NumberOfRobots;
    cout << endl << "Enter their name(s)" << endl;
    userRobot RobotArray[NumberOfRobots];

    for (int i = 0; i < NumberOfRobots; i++)
    {
        cin >> robotName;
        RobotArray[i].name = robotName;
    }

    cout << endl;

    for (int j = 0; j < NumberOfRobots; j++)
    {
        cout << RobotArray[j].name << "'s position is ";
        cout << "(" << RobotArray[j].Xvalue << "," << RobotArray[j].Yvalue << ")" << endl << endl;
    }

    string MoveFunction(RobotArray[], robotName, NumberOfRobots);
    {
        cin >> robotName;
        for (int k = 0; k < NumberOfRobots; k++)
        {
            if (robotName == RobotArray[k].name)
            {
                cout << RobotArray[k].name;
            }
        }
    }

    MenuFunction();
    char input;
    cin >> input;

    if (input == 'm')
    {
        cout << "Which robot would you like to move?";
        MoveFunction();
    }
    else if (input == 'd')
    {
        cout << "distance";
    }
    else if (input == 'q')
    {
        cout << "quit";
    }
}

错误分析与修复

第一个错误:函数声明与定义的语法问题

你犯了两个关键语法错误:

  • 函数参数必须明确写类型:RobotArray[]要写成userRobot RobotArray[](因为数组是userRobot类型),robotName要写成string robotName,NumberOfRobots要写成int NumberOfRobots
  • C++不允许在函数内部嵌套定义另一个函数,你把MoveFunction的实现写在main里了,必须移到main外部。

第二个错误:函数调用未传参

MoveFunction需要接收机器人数组和机器人数量这两个核心参数,你调用时MoveFunction()没传任何参数,自然报错。另外机器人名称应该让函数内部自己读取,不用外部传参,逻辑更通顺。

完整修复后的代码

#include <iostream>
using namespace std;

struct userRobot
{
    string name;
    int Xvalue = 0;
    int Yvalue = 0;
};

void MenuFunction()
{
    cout << "Welcome to MultiRobo Guider." << endl;
    cout << "Please select:" << endl;
    cout << "m - move" << endl << "d - distance" << endl << "q - quit" << endl << endl;
}

// 修正后的MoveFunction:接收数组和数量,内部读取目标机器人名称
void MoveFunction(userRobot RobotArray[], int NumberOfRobots)
{
    string targetName;
    cout << endl << "Enter the robot name to move: ";
    cin >> targetName;

    // 遍历查找机器人
    for (int k = 0; k < NumberOfRobots; k++)
    {
        if (targetName == RobotArray[k].name)
        {
            cout << "Found robot: " << RobotArray[k].name << endl;
            // 添加移动逻辑,修改X/Y值
            int dx, dy;
            cout << "Enter X offset to move: ";
            cin >> dx;
            cout << "Enter Y offset to move: ";
            cin >> dy;
            RobotArray[k].Xvalue += dx;
            RobotArray[k].Yvalue += dy;
            cout << "New position of " << RobotArray[k].name << " is (" << RobotArray[k].Xvalue << ", " << RobotArray[k].Yvalue << ")" << endl;
            return;
        }
    }
    cout << "Robot named " << targetName << " not found!" << endl;
}

int main()
{
    int NumberOfRobots;
    cout << "Enter the number of robots" << endl;
    cin >> NumberOfRobots;
    cout << endl << "Enter their name(s)" << endl;
    // 注意:C++标准不支持变长数组,如需兼容所有编译器,建议用vector<userRobot>替代
    userRobot RobotArray[NumberOfRobots];

    for (int i = 0; i < NumberOfRobots; i++)
    {
        cin >> RobotArray[i].name;
    }

    cout << endl;

    for (int j = 0; j < NumberOfRobots; j++)
    {
        cout << RobotArray[j].name << "'s position is ";
        cout << "(" << RobotArray[j].Xvalue << "," << RobotArray[j].Yvalue << ")" << endl << endl;
    }

    MenuFunction();
    char input;
    cin >> input;

    if (input == 'm')
    {
        cout << "Which robot would you like to move?";
        // 调用时传入数组和机器人数量
        MoveFunction(RobotArray, NumberOfRobots);
    }
    else if (input == 'd')
    {
        cout << "distance";
    }
    else if (input == 'q')
    {
        cout << "quit";
    }

    return 0;
}

额外提示

  • 代码里的userRobot RobotArray[NumberOfRobots]是编译器扩展的变长数组,不符合C++标准,要让代码可移植,建议用vector<userRobot> RobotArray(NumberOfRobots)替代。
  • 修复后的MoveFunction已经实现了查找机器人+移动的完整逻辑,符合项目目标。

内容的提问来源于stack exchange,提问作者JuniorJenkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:55:24