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取决于冲突的类型。。若这是枚举和宏之间的冲突,那个么头的顺序可能会有所帮助。如果宏定义与相同名称和不同内容之间存在冲突。。我想,这就是使用独立编译单元的原因,这是一个独立的问题,需要一个新的问题,一个新的问题。