关于C++中预处理器指令的使用 < >我在C++中用C++编译器发现以下编译错误: error on line line 1 with message: invalid preprocessing directive #a

关于C++中预处理器指令的使用 < >我在C++中用C++编译器发现以下编译错误: error on line line 1 with message: invalid preprocessing directive #a,c++,include,iostream,C++,Include,Iostream,字符a上方带有插入符号,随后第4行出现另一个错误,可能是后续错误,并显示以下消息: cout was not declared in this scope. 我使用的编辑器是代码块10.05和mingw;在不同的文件编码选项之间切换;用单引号和双引号替换角括号。我被卡住了。请原谅,如果它是重复的,尽管我已经问了几个相关的问题。 以下代码说明了该问题: #‪include ‬<iostream.h> int main() { cout<< "abc"+8; cout&l

字符a上方带有插入符号,随后第4行出现另一个错误,可能是后续错误,并显示以下消息:

cout was not declared in this scope. 
我使用的编辑器是代码块10.05和mingw;在不同的文件编码选项之间切换;用单引号和双引号替换角括号。我被卡住了。请原谅,如果它是重复的,尽管我已经问了几个相关的问题。 以下代码说明了该问题:

#‪include ‬<iostream.h>
int main()
{
cout<< "abc"+8;
cout<< "def"+4;
cout<< "ha";
return 0;
}
cout存在于命名空间std中

所以

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

如果我只使用了一次或两次,我倾向于使用第一个,如果我使用了一个名称空间中的许多不同片段并且只在cpp文件中,我倾向于使用第二个,如果我只使用一个名称空间中的一个片段或两个片段但是多次使用同一对片段,我倾向于使用第三个

此外,如评论中所述,不要在标题中使用第二个。见:

此外,您的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*

尝试如下使用:-

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

cout是std库的一部分

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

如果您的插入符号高于a,请尝试重新键入您的include。 您可能无意中键入了外观相似但代码不同的备选方案i。 关于std::的建议只与您遇到的第二个错误相关。
我也没有完全理解您试图用abc+8实现的目标。

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

你可能会有其他错误,因为代码已经过期15年了;大多数现代编译器不提供预标准库。现在,标准库标题没有.h扩展名:

#include <iostream>
最后,abc+8没有做任何明智的事情。字符串文字是一个由四个字符组成的数组,+8试图给您一个指向第九个字符的指针,而第九个字符并不存在。结果是未定义的行为

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

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

不,使用关键字不是一个好主意-名称空间冲突意味着不好的事情发生。只需显式地调用它,例如std::cout或最坏情况下的别名,如namespace dino=some::long::namespace abc+8应该做什么?使用namespace std;他经常感到沮丧。你对此没有什么要说的吗?但是你不应该把第二个放在标题中,很多人出于类似的原因讨厌它。@McAdan,在你建议的解决方案的第一个案例中,第1行上的错误消息保持不变。但是,第4行和其他cout调用的错误消息是:'cout'不是'std'的成员;在第二种情况下,错误列表仍然存在,如问题中所述;第三种情况还生成以下错误:第1行显示消息:带插入符号的预处理指令a无效;消息为“std::cout”的第2行尚未声明;未在此作用域中声明消息为“cout”的第5行。您的问题是include中的无效字符。我猜你是从某处复制/粘贴的谢谢!重新输入问题中提到的代码,并添加语句“using std::cout”可以正确工作,并给出以下假设输出哈哈哈-让我惊讶!!因为我不知道怎么做???。你有一个无效的字符。请参见上文,StackOverflow的语法highlighter甚至没有对它们进行相同的处理。我很高兴答案是有帮助的。我在问题中已经提到,我尝试在iostream声明中不使用.h扩展名,也没有给错误列表带来任何区别。即使我写了'std::cout@ChandanKumar:对不起,我没有注意到您已经尝试更正它。我不知道无效指令错误是怎么回事;听起来您可能以某种方式在源文件中使用了非ASCII字符。尝试删除并重新键入包含行。谢谢!这确实令人鼓舞。是的,我从其他地方复制了代码。让我试着看看手动重新键入是否能解决问题。@ChandanKumar:的确,如果我在十六进制编辑器中查看您的代码,我可以看到一些奇怪的Unicode格式字符。这可能会破坏编译器。我已经用实际问题更新了答案。@ChandanKumar:哈哈哈,这将是未定义行为的结果:如果你得到了,那是因为你的编译器 笔将字符串文本一个接一个地放在内存中,这样狡猾的算术abc+8恰好给您一个指向ha的指针。其他编译器可能会打印其他东西,或者崩溃,或者重新格式化硬盘,所以不要尝试自己编写这样的代码。
#include <iostream>
std::cout << "ha";
std::cout << "abc" << 8;