如何解决MeVisLab C++项目中模板上下文相关编译错误?
我是C++新手,目前正在使用MeVisLab 3.7.2开发项目,构建过程中遇到以下编译错误:
C:\Program Files\MeVisLab3.7.2\Packages\MeVis\Foundation\Sources\MLLinearAlgebra\mlLinearAlgebraTools.h(77,13): error C3861: 'MLAbs': identifier not found
C:\Program Files\MeVisLab3.7.2\Packages\MeVis\Foundation\Sources\MLLinearAlgebra\mlLinearAlgebraTools.h(77,13): message : 'MLAbs': function was not declared in the template definition context and can be found only via argument-dependent lookup in the instantiation context
C:\Program Files\MeVisLab3.7.2\Packages\MeVis\Foundation\Sources\MLLinearAlgebra\mlMatrix4.h(709): message : see reference to function template instantiation 'BASE_TYPE ml::MLInverseMatHelperml::Tmat4(const BASE_TYPE &,bool *,const double,const char *const ,const BASE_TYPE &,const size_t)' being compiled
我已确认MLAbs和MLValueIs0WOM的声明位于C:\Program Files\MeVisLab3.7.2\Packages\MeVis\Foundation\Sources\MLUtilities\mlTypeDefs.h中,但错误出现在MLLinearAlgebra目录下的头文件里。
我尝试通过include_directories添加MLUtilities目录,但问题仍未解决。当前我正在通过MeVisLab Tool Runner将项目从.pro文件转换为CMake,以下是CMakeLists.txt的关键片段:
cmake_minimum_required(VERSION 3.20) project(DnlImageLoad) find_package(MeVisLab COMPONENTS BackgroundTasks DicomTree DicomTreeImagePropertyExtension ML Parser Utilities HINTS $ENV{MLAB_ROOT} REQUIRED) find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) set(CMAKE_AUTOMOC ON)
target_link_libraries(DnlImageLoad PRIVATE MeVisLab::BackgroundTasks MeVisLab::DicomTree MeVisLab::DicomTreeImagePropertyExtension MeVisLab::ML MeVisLab::Parser MeVisLab::Utilities Qt5::Core Qt5::Gui Qt5::Widgets ) include_directories("C:/Program Files/MeVisLab3.7.2/Packages/MeVis/Foundation/Sources/MLUtilities") include_directories("C:/Program Files/MeVisLab3.7.2/Packages/MeVis/Foundation/Sources/MLAlgebra")
需要说明的是:我并未手动修改任何MeVisLab的头文件,问题出在MeVisLab源码内部——一个文件使用了另一个文件中声明的函数却无法找到。恳请各位协助解决此问题,谢谢!
内容的提问来源于stack exchange,提问作者vasudha Jha

