罗马数字转整数程序编译报错: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
相关产品推荐
相关产品推荐

