关于在C++中使用#include预处理器指令
About Use of #include Preprocessor Directive in C++
我在使用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文件include语句中删除.h扩展名;在不同的文件编码选项之间切换;用单引号和双引号代替尖括号。我被卡住了。如果它是重复的,请原谅(尽管我已经问了几个相关的问题)。以下代码说明了问题:
#include <iostream.h>
int main()
{
cout<< "abc"+8;
cout<< "def"+4;
cout<< "ha";
return 0;
}
cout
存在于命名空间std
中
所以要么
#include<iostream>
//...
std::cout << "abc" << 8;
//...
或
#include<iostream>
using namespace std;
//...
或
#include<iostream>
using std::cout;
//...
如果我只使用一次或两次,我倾向于选择第一个;如果我使用了一个命名空间中的许多不同片段(并且仅在cpp文件中),则选择第二个;或者如果我只在使用一个命名空间的片段或2,但多次使用同一对片段,则使用第三个。
此外,正如评论中所说,不要在标题中使用第二个。参见:";使用名称空间";在c++头文件中
此外,您的#include中有一个无效字符。你可以在十六进制编辑器中看到它,或者注意stackoverflow如何不一样地突出显示它们:
#include<iostream>
#include<iostream>
完全工作代码:
#include<iostream>
using std::cout;
int main()
{
cout << "abc" << 8;
cout << "def" << 4;
cout << "ha";
return 0;
}
在我更正尝试将8添加到char*
后,生成以下输出abc8def4ha
您必须使用std::cout,这意味着"cout"关键字是标准库的一部分。
"无效指令"错误是由#include
指令中的一些不可见的Unicode字符引起的;也许你是从一个在代码中嵌入了一些格式化字符的网站上复制的。如果你在十六进制编辑器中查看源代码,你可以在问题中看到它们。应该通过删除并重新键入#include
行来修复该错误。
你可能会有其他错误,因为代码已经过时15年了;大多数现代编译器不提供预标准库。如今,标准库头没有.h
扩展名:
#include <iostream>
并且他们声明的几乎所有名称都在std
命名空间内:
std::cout << "ha";
最后,"abc"+8
没有做任何合理的事情。字符串文字是一个由四个字符组成的数组,+8
试图为您提供一个指向第九个字符的指针,但该字符并不存在。其结果是未定义的行为。
如果你想打印"abc"然后是"8",那么你需要:
std::cout << "abc" << 8;
试着这样使用它:-
#include <iostream>
using std :: cout;
cout
是std
库的一部分
如果在a上方有插入符号,请尝试重新键入#include。您可能不小心键入了备选方案i,它看起来很相似,但代码不同。关于std::的建议只与您收到的第二个错误相关。我也不完全理解你试图用"abc"+8来实现什么。
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- #define xyz在#include预编译标题之前
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- 如何在大型项目中预处理具有多个 #include 文件的单个源文件
- 编写c++正则表达式以匹配#include预处理指令
- g++错误:预处理指令#INCLUDE无效