Я пытаюсь скомпилировать C++ код, показанный ниже, но я получил сообщение об ошибке сказав,'hash' уже объявлен в этой области с использованием tr1 :: hash;
In file included from src/LM.h:3:0, from src/LM.cpp:1: src/common.h:30:13: error: ‘hash’ is already declared in this scope using tr1::hash;
Это команда, которую я использовал для компиляции файлов ниже.
g++ -std=c++11 -Wall src/Foo.cpp
foo.cpp
#include "Foo.h"
...
foo.h
#ifndef FOO_H
#define FOO_H
#include "common.h"
//more code here
#endif
common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#include <iostream>
#include <fstream>
#include <cmath>
#include <cassert>
#include <cstdlib>
#include <utility>
#include <vector>
#include <string>
#include <array>
#include <algorithm>
#include <set>
#include <tr1/unordered_map>
#include <tr1/functional>
namespace std {
using tr1::unordered_map;
using tr1::hash;
} // namespace std
using namespace std;
//more code here
#endif
Я хочу, чтобы исходный код для использования станд :: tr1 :: unordered_map и std :: tr1 :: hash, а не std :: unordered_map и std :: hash (A В последнее время я вношу некоторые изменения в распределенные файлы, которые используют std :: tr1 :: unordered_map и std :: tr1 :: hash).
Что, возможно, не так с моими кодами?
UPD: https://github.com/clab/fast_align/blob/master/src/port.h похоже делает то же, что и мой. Однако это компилируется без каких-либо проблем ... Есть идеи?
Из интереса почему вы хотите использовать 'std :: tr1 :: hash' вместо' std :: hash'? – sjdowling
Этот 'port.h' компилируется, потому что он не включает'', который объявляет реальный 'std :: hash'. –
Исходный код, который я модифицирую, использует std :: tr1 :: hash, поэтому я просто следую за ним, потому что я не знаком с этими материалами. Есть ли какая-то большая разница? – hitochan