我目前使用三个文件:main.cpp、functions.cpp、functions.h。
functions.h 文件如下所示:
#ifndef FUNCIONES_H
#define FUNCIONES_H
#include <vector>
#include <string>
#include <iostream>
// 1)
void selection_sort(vector<int> & v);
void insertion_sort(vector<int> & v);
#endif
请注意,代码中没有这样的行:
using namespace std
,因为我想手动使用它,例如,std::cout
。但函数声明中出现错误。这是错误消息:
incomplete type "void" is not allowedC/C++(70)
,
identifier "vector" is undefinedC/C++(20)
,
type name is not allowedC/C++(254)
,以及
identifier "v" is undefinedC/C++(20)
.
这对我来说似乎很奇怪,因为我已经包含了向量库,但由于我没有使用 std 库,因此该文件似乎不知道向量是什么......
我可以只输入
using namespace std
并解决这个问题,但我想知道为什么它不能像这样工作。
cout
和 vector
都是标准库中的实体。所有这些实体都位于 std
命名空间中,使用时需要相应的前缀。唯一的例外是标准库中的预处理宏,它们本质上不受命名空间约束。
相比之下,
int
是核心语言关键字,而不是标准库的一部分。
标准库中的一些实体也可以在全局命名空间范围中声明,因此不需要
std::
前缀。例如,如果您尝试编写 printf
而不是 std::printf
,这很可能会起作用,但由于历史原因,全局命名空间范围中的声明仅存在于从 C 派生的实体,并且仅在包含时才保证被声明相应的 C 样式标头(例如 <stdio.h>
)。另一方面,这些头文件形式并不能保证 std
中的声明可用,因此我建议忽略它们的存在,除非您需要 C 兼容性。