C2146:语法:在标识符'之前缺少')'

时间:2012-02-07 17:21:09

标签: c++ string

所以我这是一个示例代码。我刚刚开始使用Visual C ++ 2010 Express Edition,并且我一直在和其他人一起得到这个错误,但这让我很烦恼。

  

程序9.cpp(15):错误C2146:语法错误:在标识符''之前缺少')'

这是我的代码:

#include <iostream>
#include <conio.h>
#include <string>
#include <string.h>

using namespace std;

class Salesman
{
    char name[26];
    float total_sales;
public:
    Salesman (char *s, float f)
    {
        strcpy(name s);  //Error occurs here. :(
        total_sales=f;
    }
    void prnobject (void)
    {
        cout<<this->name;
        cout<<"\tHas invoked probject: \n";
    }
};

void main()
{
    clrscr();
    salesman Raman ("Raman", 21450), Sita ("Sita", 23190), Vedant ("Vedant", 19142);
    Raman.prnobject();
    Sita.prnobject();
    Vedant.prnobject();
    getch();
}

4 个答案:

答案 0 :(得分:7)

你需要一个逗号:

 strcpy(name, s);

C ++要求您使用逗号分隔您的参数 - 您不能仅使用分隔参数的空格列出名称。

答案 1 :(得分:4)

strcpy(name, s); 
           ^^^
你错过了逗号。

答案 2 :(得分:3)

更改strcpy(name s); //Error occurs here. :(

strcpy(name, s);

不推荐评论。

答案 3 :(得分:2)

当编译器抱怨丢失或意外标点符号时,或建议您将某些字符放在某些位置时,您会出现语法错误。但是,不要过多努力将精确的错误消息安装到代码中。你会感到沮丧和困惑。相反,假装编译器给出了一个更通用的错误消息,只是告诉你该行某处的语法错误 。然后使用您自己的C ++语法知识自行查找并更正错误。 (该错误实际上可能位于较早的行;例如,如果省略分号或右括号,编译器通常会在文件的后面突出显示一行。)

我怀疑你专注于弄清楚缺失的括号应该去哪里。如果没有在你的脑海中植入这个建议,你可能会自己想出你实际上错过了两个函数参数之间的逗号:

strcpy(name, s);

编译器建议使用括号,因为右括号是最佳猜测,这将使代码在该点处在语法上有效。编译器还没有进行语义分析来确定strcpy是一个需要两个参数的函数,并且它还没有读到足够的时间来识别行后面的右括号,所以它不知道一个逗号将是修复错误的更好建议。编译器建议修复最基本的错误所需的最小更改,它可以检测到它到目前为止读取的代码量。