我尝试在4.9.68-1-MANJARO上安装ns2但是出现了这个错误
mdart/mdart_adp.cc:396:21: error: reference to ‘hash’ is ambiguous
nsaddr_t dstAdd_ = hash(mdart_->id_);
^~~~
In file included from ./mdart/mdart.h:52:0,
from ./mdart/mdart_adp.h:51,
from mdart/mdart_adp.cc:47:
./mdart/mdart_function.h:230:17: note: candidates are: nsaddr_t hash(nsaddr_t)
inline nsaddr_t hash(nsaddr_t id) {
^~~~
In file included from /usr/include/c++/7.2.1/bits/basic_string.h:6575:0,
from /usr/include/c++/7.2.1/string:52,
from /usr/include/c++/7.2.1/bitset:47,
from ./mdart/mdart_function.h:62,
from ./mdart/mdart.h:52,
from ./mdart/mdart_adp.h:51,
from mdart/mdart_adp.cc:47:
/usr/include/c++/7.2.1/bits/functional_hash.h:58:12: note: template<class _Tp> struct std::hash
struct hash;
^~~~
make: *** [Makefile:94: mdart/mdart_adp.o] Error 1
Ns make failed!
我从
改变了第137行void eraseAll() {erase(baseMap::begin(), baseMap::end()); }
到
void eraseAll() { baseMap::erase(baseMap::begin(), baseMap::end()); }
但是,仍然有同样的错误。请帮帮我。
答案 0 :(得分:0)
我将otcl-1.14 / Makefile.in的第7行更改为CC = gcc-4.9.3
这里最重要的gcc组件是 g ++ 。
使用gcc-4.9.3 / g ++构建ns-2.35 - 4.9.3:
$ tar xvf ns-allinone-2.35_gcc5.tar.gz
$ cd ns-allinone-2.35/
$ export CC=gcc-4.9.3 CXX=g++-4.9.3 && ./install
$ cd ns-2.35/
# make install
// 'make install' will copy 'ns' to /usr/local/bin/
# cd ../nam-1.15/
# make install && exit
注意:(临时)导出命令将注意ns-allinone中的主要应用程序使用gcc-4.9.3 / g ++ - 4.9.3编译:tcl,tk,otcl,tclcl, ns- 2.35 ,nam-1.15。退出终端时,导出命令将被取消。
答案 1 :(得分:0)
我们必须编辑 ns-allinone-2.35 的源代码。它包含一些错误:
在 ns-allinone-2.35/ns-2.35/mdart/
中,我们必须编辑 3
个文件
mdart_function.h
,在行号 230
处将 hash
重命名为 hash_
mdart_adp.cc
,在行号 108
和 396
将 hash
重命名为 hash_
。我们需要将 hash
更改为 hash_
的原因是。! , hash
是 STL library utility
,所以它会直接引用 STL std::hash
。所以我将 hash
重命名为 hash_
mdart_function.h
,在行号 48
处重写这样的行 #define __mdart_rqueue_h__
。原因是,如果我们正在编写头文件,那么首先我们必须这样写,
#ifdefn __filename_h__
#define __filename_h__
<块引用>
仅在 filename.h
中。
现在在ns-allinone-2.35/ns-2.35/linkstate/
中我们必须编辑ls.h
文件
64
处重写像 #ifndef __ls_h__
和 65
应该像 #define __ls_h__
仅此而已。之后去安装。