带有常量的C ++ endl

时间:2011-07-11 20:39:37

标签: c++ endl

我只是想熟悉从Java迁移的C ++的基础知识。我刚刚编写了这个功能禁止程序,遇到了错误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 个答案:

答案 0 :(得分: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";

答案 1 :(得分:6)

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

此外,预处理器常量不是语言常量。您应该使用const string STRING("C++ is working on this machine usig the GCC/G++ compiler");

答案 2 :(得分:2)

#define结尾处有一个句号结尾 - 这将被代入你的代码中。

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

答案 3 :(得分:1)

因为你在STRING之后有一个半结肠。删除它并试一试......

答案 4 :(得分:1)

删除;定义

中的STRINGS

答案 5 :(得分:1)

中删除;
#define STRING "C++ is working on this machine usig the GCC/G++ compiler"

答案 6 :(得分:1)

删除;末尾的#define STRING,然后重试。

答案 7 :(得分:0)

define是一个预处理程序指令。这将替换定义的宏后面的所有内容,在本例中为STRING。因此,删除在违规行中展开时放置语句结束标记的最后一个分号(;)。