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

罗马数字转整数程序编译报错:main函数类型冲突问题求助

解决罗马数字转整数程序的编译错误

1. 核心错误原因

编译时出现的conflicting types for 'main'错误,本质是代码里定义了两个不同签名的main函数:一个是无参的int main()(第47行),另一个是带命令行参数的int main(int argc, char *argv[])(第65行)。C++程序只能有一个入口函数main,必须删掉其中一个。从你提供的测试逻辑来看,保留无参的int main()即可。

2. 完整修正代码

除了修复main函数冲突,你的代码还缺少必要的标准库头文件,否则string、cout等元素会编译报错。修正后的完整代码如下:

#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
    int value(char r){
        if (r == 'I')
            return 1;
        if (r == 'V')
            return 5;
        if (r == 'X')
            return 10;
        if (r == 'L')
            return 50;
        if (r == 'C')
            return 100;
        if (r == 'D')
            return 500;
        if (r == 'M')
            return 1000;
 
        return -1;
    }
    int romanToInt(string& s) {
        int ret = 0;

        for (int i = 0; i < s.length(); i++) {
            int s1 = value(s[i]);

            if (i + 1 < s.length()) {
                int s2 = value(s[i + 1]);

                if (s1 >= s2) {
                    ret += s1;
                }
                else {
                    ret += s2 - s1;
                    i++;
                }
            }
            else {
                ret += s1;
            }
        }
        return ret; 
    }

};

int main()
{
    Solution m;

    string str = "III";
    cout << "Integer form of Roman Numeral is " << m.romanToInt(str) << endl; 
    return 0;
}

3. 关键修正点说明

  • 补充#include <iostream>和#include <string>,引入标准输入输出库和字符串库
  • 添加using namespace std;,简化标准库元素的调用(如果不想用这个,可以把代码里的string改成std::string,cout改成std::cout,endl改成std::endl)
  • 删除多余的带参数main函数定义,确保只有一个入口函数

4. 可选优化建议

  • 把value函数改成静态成员函数,这样无需创建Solution对象就能直接调用
  • 增加非法字符处理:当前value函数遇到非罗马字符返回-1,但romanToInt未处理该错误值,可以添加判断逻辑(比如返回错误码、抛出异常)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:45:42