2012-02-07 3 views
0

Итак, я это пример кода. Я только начал использовать Visual C++ 2010 Express Edition, и я продолжаю получать эту ошибку вместе с другими, но это меня очень беспокоит.C2146: синтаксис: отсутствует ')' перед идентификатором '

Программа 9.cpp (15): ошибка C2146: синтаксическая ошибка: отсутствует ')' перед идентификатором 's'

Вот мой код:

#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(); 
} 
+5

'strcpy (name, s);' –

+0

Ваш конструктор должен также bem Salesman (const char * s, float f) для корректности, так как вы не хотите изменять параметр входной строки, и вы должны, вероятно, проверить переполнение копии (имя ограничено 25 символами + nul terminator) или используйте std :: string вместо этого и удалите все эти головные боли. – David

+0

Ehm, @ BoltClock ♦, вы только что отредактировали этот вопрос, чтобы прочитать «Так что это пример кода»? –

ответ

7

Вам нужна запятая :

strcpy(name, s); 

С ++ требуется, чтобы вы разделили свои аргументы запятой - вы не можете просто перечислить имена с помощью пространства, разделяющие аргументы.

3

Изменить strcpy(name s); //Error occurs here. :(

Для

strcpy(name, s);

Нет комментариев, как это рекомендовано.

+8

Вы забыли исправить комментарий: '// Нет ошибки здесь:)' Устаревшие комментарии - настоящая боль в шее. – sbi

4
strcpy(name, s); 
      ^^^ 

Вы пропустили запятую.

2

Когда компилятор жалуется на отсутствие или непредвиденную пунктуацию или предлагает разместить определенные символы в определенных местах, у вас есть синтаксическая ошибка . Однако не ставьте слишком много усилий на точный вывод сообщения об ошибке в ваш код. Вы просто расстроены и смущены. Вместо этого притворитесь, что компилятор дал более общее сообщение об ошибке, просто сказав вам, что есть синтаксическая ошибка где-то на этой строке. Затем используйте собственные знания синтаксиса C++, чтобы найти и исправить ошибку самостоятельно. (Вероятно, ошибка может быть на более ранней строке: если вы опускаете точку с запятой или замыкающую скобу, например, компилятор будет часто выделять строку позже в файле.)

Я подозреваю, пропущенные скобки должны идти. Если это предложение не было посажено в вашем уме, вы, вероятно, понял бы по своему усмотрению, что вы на самом деле не хватает запятой между двумя аргументами функции:

strcpy(name, s); 

компилятор предполагает скобку из-за закрывающей скобкой это его наилучшее предположение за то, что сделало бы код синтаксически действительным в этой точке. Компилятор еще не выполнил семантический анализ, чтобы определить, что strcpy - это функция, которая нуждается в двух аргументах, и она еще недостаточно читала, чтобы распознать закрывающую скобку позже в строке, поэтому она не знает, что запятая быть лучшим предложением для исправления ошибки. Компилятор предлагает минимум изменений, необходимых для исправления самой простой ошибки, которую он может обнаружить, учитывая количество кода, которое он читает до сих пор.

Смежные вопросы