0

私は、Java から移行する C++ の基本に慣れようとしています。この機能禁欲プログラムを書いたところ、エラーが発生test.cpp:15: error: expected primary-expression before ‘&lt;<’ 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);
}
4

8 に答える 8

8

#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";
于 2011-07-11T20:42:28.933 に答える
6

;プリプロセッサ定義にaがあります。#DEFINE STRING xx ステートメント全体 (を含む;) を、参照されている場所にコピーするだけであることに注意してください。

また、プリプロセッサ定数は言語定数ではありません。使用する必要がありますconst string STRING("C++ is working on this machine usig the GCC/G++ compiler");

于 2011-07-11T20:43:14.100 に答える
2

末尾にセミコロンがあります#define- これはコードに代入されます。

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

于 2011-07-11T20:43:09.570 に答える
1

STRING の後にセミコロンがあるためです。取り外して試してみてください...

于 2011-07-11T20:42:29.943 に答える
1

定義;内の を削除しますSTRINGS

于 2011-07-11T20:43:02.850 に答える
1

削除します。から

#define STRING "C++ is working on this machine usig the GCC/G++ compiler"
于 2011-07-11T20:43:21.990 に答える
1

;の末尾の を削除して、#define STRINGもう一度お試しください。

于 2011-07-11T20:43:23.420 に答える
0

define はプリプロセッサ ディレクティブです。これにより、定義されたマクロ (この場合は STRING) に続くすべてが置き換えられます。そのため、問題のある行で展開されているときに、ステートメントの終了マーカーを配置する最後のセミコロン (;) を削除します。

于 2014-04-04T11:09:26.257 に答える