由于 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++ 编译器拒绝了我的代码的主要内容,如果未能解决你的问题,请参考以下文章

C++ 枚举类型声明可以放在 int main 的前面吗?

如何解决此错误“'int'之前的预期主表达式?”

int main() 是不是需要在 C++ 上声明?

C++中int &m 传参问题?

C++ 变量名(可以将 main 声明为变量,但对于其他函数名则不然)

C++(实验二)