friend类指向不同命名空间中的同名类

时间:2018-05-31 05:57:01

标签: c++ tensorflow eigen3

对不起,我无法清楚地描述问题。 编译器给出的错误是:

D:\download\tensorflow-master\tensorflow-master\tensorflow\contrib\cmake\build\protobuf\src\protobuf\src\google/protobuf/arena.h(883): error C3855: “Eigen::Map”: type parameter 'MapOption' is incompatible with the declaration
D:\download\tensorflow-master\tensorflow-master\tensorflow\contrib\cmake\build\protobuf\src\protobuf\src\google/protobuf/arena.h(883): error C2976: “Eigen::Map”: too few type arguments

错误来自官方的tensorflow代码,我可以运行用C ++编写的示例程序。当我尝试将我的tensorflow代码插入到我的另一个项目中时,出现错误。

 template <typename Key, typename T>
 friend class Map;

我知道问题在于地图&#39;指向Eigen :: Map,同时需要指向google :: protobuff :: Map。此外,宣布地图&#39;在google :: protobuff名称空间下。 有没有人遇到过同样的问题? 我尽力发表明确的声明。非常感谢!

1 个答案:

答案 0 :(得分:2)

这就是你不应该这样做的原因:

  1. 在范围内使用using namespace声明

  2. 依赖于重新定义在标准库或公共库中保留或使用的标识符

  3. 两者都会导致名称冲突,后者可能导致无法察觉的冲突。