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

C++ friend类指向不同命名空间中同名的类,c++,tensorflow,eigen3,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 declara

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

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

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

 template <typename Key, typename T>
 friend class Map;
模板
好友类地图;
我知道问题是“Map”指向Eigen::Map,而它需要指向google::protobuff::Map。此外,“Map”的声明位于google::protobuff名称空间下。 以前有人遇到过同样的问题吗?
我正在尽最大努力做一个清楚的陈述。非常感谢!

这就是为什么您不应该:

  • 在带有声明的范围内使用
    使用命名空间

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


  • 两者都会导致名称冲突,后者会导致无法检测的冲突。

    这就是为什么您不应该:

  • 在带有声明的范围内使用
    使用命名空间

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


  • 两者都会导致名称冲突,后者会导致无法检测到的冲突。

    我们无法真正告诉您这方面的任何信息,请用英语说明您的错误,并提供一个。猜猜看,您的头文件或cpp文件中是否有
    使用命名空间Eigen
    ,然后使用完全限定名,或者
    Eigen::Map
    或者
    google::protobuff::Map
    并忘记
    使用命名空间
    构造我们无法真正告诉您这方面的任何信息,请用英语填写您的错误,并提供一个。在其中一个包含项之前,您的头文件或cpp文件中是否有
    使用namespace-Eigen
    ?然后使用完全限定名,要么
    Eigen::Map
    要么
    google::protobuff::Map
    忘记
    使用名称空间
    构造感谢您的回答!我通过删除“使用名称空间”修复了这个问题。但是,由于opencv和tensorflow之间的宏冲突,出现了新的问题,我如何解决这个问题(我不允许修改官方代码)@BLACK取决于冲突的类型。。若这是枚举和宏之间的冲突,那个么头的顺序可能会有所帮助。如果宏定义与相同名称和不同内容之间存在冲突。。我想,这就是使用独立编译单元的原因,这是一个独立的问题,需要一个新问题,一个新的。谢谢你的回答!我通过删除“使用名称空间”修复了这个问题。但是,由于opencv和tensorflow之间的宏冲突,出现了新的问题,我如何解决这个问题(我不允许修改官方代码)@BLACK取决于冲突的类型。。若这是枚举和宏之间的冲突,那个么头的顺序可能会有所帮助。如果宏定义与相同名称和不同内容之间存在冲突。。我想,这就是使用独立编译单元的原因,这是一个独立的问题,需要一个新的问题,一个新的问题。