更多MFC相关内容正在更新中…
无论你是改 bug 改到抓狂还是更加注重 基础学习 ,都可以持续关注噢!
明人不说暗话,上解决办法!
- 加上 using namespace std;
- 在每一处vector使用前加上std::
例如:std::vector< int > set; - 加上using std::vector;
以上三种方式选一种即可,如果你已经考虑了命名空间,却还是报错,那么很遗憾,这篇博客不适合你,可以关闭页面退出啦,再见!
明明引了头文件,程序为什么还报错??
省流: 因为 命名空间 被你忽略啦!
引入
命名空间具体是什么呢?不急,我们先来看一个简单的程序…
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World!"<<endl;
return 0;
}
这个程序想必大家都不陌生,博主当初接触C++写的第一个程序就是这个。
毋庸置疑,这个程序很简单。函数体没什么好说的,就是在屏幕上输出打印一个 “Hello World!”。我们不妨来看一下main函数顶上的这两行,博主在最开始写程序的时候,只是把它当成是写程序的固定格式。不管是什么程序,写上这两行,再写main函数就万事大吉。对于初期简单的程序当然适用,但是这种想法本质上是 非常非常错误的 。
#include < iostream >
引头文件,主要与输入输出流有关,即cin、cout…
慢慢地,我们会发现只引这个头文件是不够的,还有#include < cmath >、#include < stdlib.h >等等。不过这不是这篇文章的重点,在这里也就一带而过…
命名空间
using namespace std; ——>引入命名空间 std
std(标准命名空间): 在C++中,标准库中的大部分功能都被放置在std命名空间下,比如输出 “Hello World!” 使用的std::cout
,cout是C++标准库中std命名空间中的一个对象
,std::cout是用于标准输出的流对象,同类型的还有std::cin
。而std::vector、std::string
等则属于C++标准库中std命名空间中的一个类
。
命名空间的主要作用是避免命名冲突。在C++程序中,如果两个或多个标识符拥有相同的名称,编译器可能无法确定到底使用哪个标识符,从而导致编译错误。这种情况下可以通过在不同的命名空间中定义标识符来避免冲突。
命名空间是一种将相关的标识符分组的机制。通过将标识符放置在命名空间中,我们可以确保一个标识符只能在其所属的命名空间内被访问,而不会与其他命名空间中的标识符产生冲突。这样就可以使程序变得更加可读、可维护和易于扩展。
因此,在使用标识符时,我们需要告诉编译器它所属的命名空间。
程序修改
很显然,下面的这段程序没有指出命名空间…
#include <vector>
int main()
{
vector<int> set;
return 0;
}
那么应该如何修改呢?
// 第一种修改方法
#include <vector>
using namespace std;
int main()
{
vector<int> set;
return 0;
}
// 第二种修改方法
#include <vector>
int main()
{
std::vector<int> set;
return 0;
}
// 第三种修改方法
#include <vector>
using std::vector;
int main()
{
vector<int> set;
return 0;
}
- 第一种方法,直接引入整个命名空间,简单粗暴而且省事,但是存在潜在的冲突和命名空间污染(可能和引入的另一个命名空间存在相同名称的标识符,导致编译器无法识别)。
- 至于后两种方法,优点就是第一种的缺点,清晰,不容易起冲突打架,但是实在是太麻烦,尤其是代码量大起来、需要使用的类和对象多起来的时候。
优缺点放在这里,大家按需选用!