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

您的预处理器定义中有一个;。请注意,#DEFINE STRING x只需将整个 x 语句(包括;)复制到引用它的位置。

此外,预处理器常量不是语言常量。你应该使用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 回答