-1

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

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

(在字符 a 上方有一个插入符号),然后是另一个,可能是随之而来的错误,第 4 行带有消息:

cout was not declared in this scope. 

我正在使用的编辑器是带有 mingw 的 Code blocks 10.05。我尝试从 iostream 文件包含语句中删除 .h 扩展名;在不同的文件编码选项之间切换;并用单引号和双引号替换尖括号。我坚持it.Pardon 如果它是重复的(尽管我经历了几个已经提出的相关问题)。下面的代码说明了这个问题:

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

5 回答 5

3

cout存在于命名空间内std

所以要么

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

或者

#‪include‬&lt;iostream>
using namespace std;

//...

或者

#‪include‬&lt;iostream>
using std::cout;

//...

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

此外,如评论中所述,请勿在标题中使用第二个。请参阅:C++ 标头中的“使用命名空间”

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

#‪include‬&lt;iostream>
#include<iostream>

完整的工作代码:

#include<iostream>

using std::cout;

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

abc8def4ha在我更正尝试将 8 添加到 a 后产生以下输出char*

于 2013-08-08T21:15:48.417 回答
2

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

于 2013-08-08T21:17:30.400 回答
2

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

您可能还会遇到其他错误,因为代码已经过时十五年了;大多数现代编译器不提供预标准库。这些天来,标准库头文件没有.h扩展名:

#include <iostream>

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

std::cout << "ha";

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

如果要打印“abc”后跟“8”,那么您需要:

std::cout << "abc" << 8;
于 2013-08-08T21:42:58.837 回答
1

尝试像这样使用它:-

#‪include ‬&lt;iostream>
using std :: cout;

coutstd图书馆的一部分

于 2013-08-08T21:16:43.917 回答
1

如果您在 a 上方有插入符号,请尝试重新输入您的 #include。您可能不小心输入了看起来相似但代码不同的替代 i。关于 std:: 的建议仅与您遇到的第二个错误有关。我也没有完全理解你想用“abc”+8 实现什么。

于 2013-08-08T21:30:06.600 回答