关于在C ++中使用#include预处理程序指令

时间:2013-08-08 21:13:08

标签: c++ include iostream

我在使用g ++编译器的C ++中偶然发现了以下编译错误:

error on line line 1 with message:
invalid preprocessing directive #a

(在角色a上面有一个插入符号),然后是第4行的另一个可能是后续的错误消息:

cout was not declared in this scope. 

我正在使用的编辑器是带有mingw的代码块10.05。我尝试从iostream文件包含语句中删除.h扩展名;在不同的文件编码选项之间切换;以及用单引号和双引号替换角括号。我被困在它上面。如果它是重复的话(虽然我经历了几个已经问过相关的问题)。     以下代码说明了问题:

#‪include ‬<iostream.h>
int main()
{
cout<< "abc"+8;
cout<< "def"+4;
cout<< "ha";
return 0;
}

5 个答案:

答案 0 :(得分:2)

命名空间cout

中存在

std

所以要么

#‪include‬<iostream>
//...
std::cout << "abc" << 8;
//...

#‪include‬<iostream>
using namespace std;

//...

#‪include‬<iostream>
using std::cout;

//...

如果我只使用一次或两次,我倾向于选择第一种,如果我使用命名空间中的许多不同部分(并且仅在cpp文件中使用),则倾向于第一种,如果我使用第三种,则倾向于第三种。 m只使用命名空间中的一个或2个,但多次使用同一对。

此外,如评论中所述,请勿在标题中使用第二个。请参阅:"using namespace" in c++ headers

此外,您的#include中包含无效字符。您可以在十六进制编辑器中看到它或注意stackoverflow如何不突出显示它们:

#‪include‬<iostream>
#include<iostream>

完全正常工作的代码:

#include<iostream>

using std::cout;

int main()
{
    cout << "abc" << 8;
    cout << "def" << 4;
    cout << "ha";
    return 0;
}

我在更正后尝试将{8添加到abc8def4ha

后生成以下输出char*

答案 1 :(得分:2)

你必须使用std :: cout,这意味着“cout”关键字是标准库的一部分。

答案 2 :(得分:2)

“无效指令”错误是由#include指令中的一些不可见的Unicode字符引起的;也许你是从一个在代码中嵌入了一些格式化字符的网站复制过来的。如果你在十六进制编辑器中查看源代码,可以在问题中看到它们。应通过删除和重新键入#include行来修复该错误。

您可能还有其他错误,因为代码已过期十五年了;大多数现代编译器都不提供预标准库。目前,标准库标头没有.h扩展名:

#include <iostream>

并且他们声明的几乎所有名称都限定在std命名空间内:

std::cout << "ha";

最后,"abc"+8没有做任何明智的事情。字符串文字是一个包含四个字符的数组,+8试图为您提供指向第九个字符的指针,该字符不存在。结果是未定义的行为。

如果要打印“abc”后跟“8”,则需要:

std::cout << "abc" << 8;

答案 3 :(得分:1)

尝试使用它: -

#‪include ‬<iostream>
using std :: cout;

coutstd

的一部分

答案 4 :(得分:1)

如果你有一个以上的插入符号,请尝试重新输入你的#include。 您可能会意外地键入看起来相似但具有不同代码的替代i。 关于std ::的建议仅与您获得的第二个错误有关。 我也没有完全理解你用“abc”+8来实现的目标。