Каковы различия между «typedef», «using», «namespace» и «using namespace» в C ++? - PullRequest
0 голосов
/ 29 сентября 2018

Мне трудно получить точное значение этих терминов в C ++.Кажется, что есть много общего между собой (по крайней мере, typedef и namespace).Подскажите, пожалуйста, почему эти понятия были изобретены в C ++?и в каких сценариях мы должны использовать каждый из них?

Также это обсуждение особенно запутанно.Там написано, что typedef и using одинаковы.Меня удивляет, почему у нас два разных термина, если они почти одинаковые?

Из-за плохого понимания этих терминов я кодировал следующее и получил ошибку, показанную ниже:

Files.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;
};

Ниже приводится ошибка make , которую я получаю:

...../include/Files.hpp:10:20: error: ‘filesystem’ in namespace ‘boost’ does not name a type
 typedef boost::filesystem FS; //! Short form for boost filesystem

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Так как boost::filesystem не тип, а namespace.Используйте псевдоним пространства имен в области действия файла:

namespace FS = boost::filesystem;
0 голосов
/ 29 сентября 2018

boost::filesystem - это пространство имен, а не тип.Таким образом, вы можете сделать это:

namespace FS = boost::filesystem;
...