由于 int main() 函数的定义错误,C++ 编译器拒绝了我的代码
Posted
技术标签:
【中文标题】由于 int main() 函数的定义错误,C++ 编译器拒绝了我的代码【英文标题】:The C++ compiler rejects my code because of definition error on the int main() function 【发布时间】:2019-01-25 14:04:18 【问题描述】:我是 C++ 新手,我正在努力学习 C++ 以参加学校的入学考试,以便参加我想要的计算机科学课程。 我必须编写一个程序来创建一个数组并将它们给我的值用于行和列。 该程序使用一个函数来求最大行的整数之和。
#include <iostream>
using namespace std;
int findMaxSumArray (int arr[3][3])
int sum1, sum2 = 0;
int i, j = 1;
int row = 3;
int col = 3;
for (i = 0; i < row; ++i)
sum1 = sum1 + arr[1][i];
for (j = 2; j < col; ++j)
for (i = 0; i < row; ++i)
sum2 = sum2 + arr[j][i];
if (sum2 > sum1)
sum1 = sum2;
return sum1;
int main ()
int arr[3][3] = 1, 2, 3, 2, 3, 4, 5, 6, 7 ;
cout << findMaxSumArray(arr);
此时,我的代码已在其他在线编译器上返回正确答案,但用于测试的编译器一直给我这个错误。我调查了错误的原因,它们似乎都不相关,涉及两个文件一起引用 main。 这些是我得到的错误:
Syntax Error(s)
prog.cpp: In function 'int main()':
prog.cpp:46:5: error: redefinition of 'int main()'
int main()
^
prog.cpp:38:5: note: 'int main()' previously defined here
int main ()
^
我有点迷茫,为什么我可能会在某些编译器上出现此错误,但不是所有编译器。我在学习 C++ 时并不完全理解它。你们中的任何人都可以阐明这个问题吗?
【问题讨论】:
评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:这与您的问题无关,但您的代码中还有另一个问题 - 您使用的是未初始化的局部变量。
不管它看起来如何,这行代码不会初始化 sum1,它只会声明它:
int sum1, sum2 = 0;
为了更清楚,我们可以这样重写,意思是一样的:
int sum1;
int sum2 = 0;
默认情况下局部变量不会被初始化为零(就像全局变量一样),这意味着它们会有一些价值,但我们无法预测。
您可以猜到,使用 var1 不会产生预期的结果。
sum1 = sum1 + arr[1][i]; //!!
反而会导致奇怪的错误。
【讨论】:
这不会导致 main() 的两个定义 编译器错误。它可能会在运行时导致未定义的行为,但这与编译器错误无关。 感谢您的洞察力,实际上给我带来了一些麻烦。 好点,但与 actual 问题无关(主要的双重定义)。您应该发表评论(下次...)。 @Aconcagua 确实如此,遗憾的是我还没有足够的声誉来发表评论,我希望它可能会在某种程度上有所帮助 确实有帮助。我发现“你可以先发表评论”的规则很愚蠢。赞成有帮助(即使不是答案,严格来说)。您可以详细说明声明语法(可以合理地假设 - 我认为 OP 确实 - 两个变量都归零)。以上是关于由于 int main() 函数的定义错误,C++ 编译器拒绝了我的代码的主要内容,如果未能解决你的问题,请参考以下文章