有人可以帮忙找出这个错误吗? (C ++)

时间:2018-09-13 00:18:27

标签: c++

在编译时出现此错误:

horserace.cpp:32:22:错误:在“ {”令牌之前应为“,”或“;”  字符串coinflip0(h0){                       ^

这是我的代码(当前试图让第一个“马”运行):

#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
using namespace std;

string h0 = "0................";
string h1 = "1................";
string h2 = "2................";
string h3 = "3................";
string h4 = "4................";

string coinflip0(h0);
int main(){
   cout << "Press Enter to begin! " <<endl;
   cin.ignore();
   std::cout << h0 << endl;
  // bool keepgoing = true;
//      srand(time(NULL));//time goes back to zero for each loop
  // while(keepgoing){
//      for(int num=0; num<5; num++){

//      } // end for
  // } // end while

   cout << "\n Press Enter to continue " << endl;
   cin.ignore();
   cout << endl;
   string coinflip0(h0);
   cout << h0 << endl;
} // end main

string coinflip0(h0){

   int position = 0; // current position of horse

   // find random number(0 or 1)
   int num = rand() % 2;
   position = position + num;

   if(num==1){
        std::swap(h0[position], h0[position+1]);
   return string h0;
   } // end if
}//end coin flip

2 个答案:

答案 0 :(得分:2)

您的代码中有多个错误。首先是语法错误-当您声明一个接受某些参数(在您的情况下为h0的函数)时,您必须指定参数类型。 在主要功能上方,您说将有一些功能coinflip0

string coinflip0(h0);

该函数返回一个string,但是未指定参数h0的类型。

为此,只需在函数参数前面编写类型,如下所示:

string coinflip0(string h0);

函数定义也是如此。


代码中的第二个错误是从return函数coinflip0开始。首先,返回类型已经在函数签名中指定(请参见上文),因此无需编写...

return string h0;

...您应该写:

return h0;

而且,如果函数说它返回了某些内容(在这种情况下为string),则它必须在所有条件下都返回它,不仅要满足一个或两个条件。 这意味着您应该将return语句移出if分支,或者在函数末尾返回其他内容。

答案 1 :(得分:0)

在声明函数时,需要记住一些关键事项。

返回类型,函数名称和函数参数。

在main()函数之前

string coinflip0(h0);

因此,在这里我们可以看到您的返回类型是一个字符串,函数名称是coinflip0,传入的参数名为h0,但是您忘记指定参数类型,这很可能导致您的第一个错误(通常,您的错误消息会显示一个行号,该行号可以将您定向到导致代码无法运行的行)。相反,您的函数应如下所示:

string coinflip0(string h0); // assuming you want to pass in a string 

您甚至可以将函数声明保留为

string coinflip0(string);

^,而不使用参数名称。无论您在何处定义函数,都必须提供参数名称。

在函数定义中,当您返回变量时,不需要包括数据类型,因为您已经在函数名称中指定了该数据类型。

所以你可以这样写:

return h0;