C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
What are the differences between "typedef", "using", "namespace" and "using namespace" in C++?
我发现很难在C++中理解这些术语的确切含义。似乎彼此之间有很多重叠(至少是 typedef 和命名空间(。你能告诉我为什么这些概念是在C++发明的吗?我们应该在什么情况下使用其中的每一个?
此外,这种讨论尤其令人困惑。它说"typedef"和"using"是相同的。这让我想知道,如果它们几乎相同,为什么我们有两个不同的术语?
由于对这些术语的理解不足,我编写了以下内容并得到如下所示的错误:
文件.hpp
#include <boost/filesystem.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <utility>
#include <algorithm>
#include <fstream>
#include <ostream>
#include <iomanip>
#include <cmath>
class Files {
public:
//@Brief: We create some short forms for long type names
typedef boost::filesystem FS; //! Short form for boost filesystem
// Short form for file name pairs (for example, <200.jpg, 200>)
typedef std::pair<FS::path, int> file_entry;
// Short form for vector of tuples
typedef std::vector<file_entry> vec;
// Short form for iterator of type, boost::filesystem::directory_iterator
typedef FS::directory_iterator dirIter;
};
以下是我收到的错误:
...../include/Files.hpp:10:20: error: ‘filesystem’ in namespace ‘boost’ does not name a type
typedef boost::filesystem FS; //! Short form for boost filesystem
>boost::filesystem
是一个命名空间,而不是一个类型。 所以你可以这样做:
namespace FS = boost::filesystem;
因为boost::filesystem
不是一个类型,而是一个namespace
。在文件范围使用命名空间别名:
namespace FS = boost::filesystem;
相关文章:
- "using namespace std;"在C++的作用是什么?
- 为什么我需要做'using namespace std'而不是"使用 std::cout"?
- 'using namespace'实现细节的便捷方法(仅标头库)?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- C++ "using tcp=x"到"namespace tcp=x"有什么区别
- "using namespace"子句在什么范围内有效?
- 如何找到"using namespace std"的违规用法?
- 在实现文件中,我们应该更喜欢"using namespace"指令还是将实现包装在命名空间 { } 中?
- 如何根据对象名称将'using namespace'添加到类定义中?
- 没有任何 #include "using namespace std;"?
- 用于定义全局函数"using namespace"
- 'using namespace'如何在C++运作
- 为什么我们应该在使用"using namespace std"时使用"#include<iostream>"?
- 如何在代码中使用 STD 而不包含"using namespace std"?
- 如何正确使用"using namespace foo?"
- 使用不带前缀"std"且不带"using namespace std;"的 std::sort() 成功编译
- 总是"using namespace std" ?
- 头文件中可以包含"using namespace"语句吗?
- 为什么以及如何"using namespace"声明会混淆C++中的编译器?
- "using namespace std;"是否免于过多代码规则?