C ++ endl с константами - PullRequest
       40

C ++ endl с константами

0 голосов
/ 12 июля 2011

Я просто пытаюсь ознакомиться с основами C ++, переходящими с Java. Я только что написал эту функциональную абстинентную программу и сталкиваюсь с ошибкой test.cpp:15: error: expected primary-expression before ‘<<’ token, и я не уверен, почему.

Кто-нибудь хочет объяснить, почему endl не работает с константами? Код ниже.

//Includes to provide functionality.
#include <iostream>

//Uses the standard namespace.
using namespace std;

//Define constants.
#define STRING "C++ is working on this machine usig the GCC/G++ compiler";

//Main function.
int main()
{
  string enteredString;

  cout << STRING << endl;
  cout << "Please enter a String:" << endl;
  cin >> enteredString;
  cout << "Your String was:" << endl;
  cout << enteredString << endl;

  return(0);
}

Ответы [ 8 ]

8 голосов
/ 12 июля 2011

Ваш #define имеет точку с запятой в конце.Это становится частью макроса , поэтому предварительно обработанный код выглядит следующим образом:

cout << "C++ is working on this machine usig the GCC/G++ compiler"; << endl;

Удалите точку с запятой, и все будет в порядке.


PS: Обычно лучше использовать для этого реальные константы, чем полагаться на препроцессор:

const char *STRING = "C++ is working on this machine usig the GCC/G++ compiler";
6 голосов
/ 12 июля 2011

У вас есть ; в вашем определении препроцессора.Обратите внимание, что #DEFINE STRING x просто копирует весь x-оператор (включая ;) в место, на которое он ссылается.

Кроме того, константа препроцессора не является языковой константой.Вы должны использовать const string STRING("C++ is working on this machine usig the GCC/G++ compiler");

2 голосов
/ 12 июля 2011

У вас есть точка с запятой в конце вашего #define - это будет подставлено в ваш код, давая.

cout << "C++ is working on this machine usig the GCC/G++ compiler"; << endl;

1 голос
/ 12 июля 2011

Удалите ; в конце #define STRING и попробуйте снова.

1 голос
/ 12 июля 2011

Удалить ; из

#define STRING "C++ is working on this machine usig the GCC/G++ compiler"
1 голос
/ 12 июля 2011

Удалить ; в STRINGS определении

1 голос
/ 12 июля 2011

Потому что после STRING у вас есть точка с запятой. Удалите его и попробуйте ...

0 голосов
/ 04 апреля 2014

define - это директива препроцессора. Это заменяет все, что следует за определенным макросом, в данном случае STRING. Итак, удалите последнюю точку с запятой (;), которая ставит маркер конца оператора при развертывании в ошибочной строке.

...