C++ 矩阵模板库2和g++;4.7
几年前,我不得不在职业生涯的最后一个项目中使用C++ 矩阵模板库2和g++;4.7,c++,compiler-errors,64-bit,debian,g++-4.7,C++,Compiler Errors,64 Bit,Debian,G++ 4.7,几年前,我不得不在职业生涯的最后一个项目中使用MTL2库(这是一项强制性要求)。我必须处理现有的(相当旧的)代码,我使用的编译器是g++4.4 现在,我想继续致力于这个项目,努力改进它。我想使用一些C++11功能,由于Debian Wheezy附带了g++4.7,我想我会使用它 因此,我安装了MTL2,并尝试编译该项目。但我发现一个错误,因为不知道 error: expected type-specifier before ‘ptrdiff_t’ error: expected ‘>’ b
MTL2
库(这是一项强制性要求)。我必须处理现有的(相当旧的)代码,我使用的编译器是g++4.4
现在,我想继续致力于这个项目,努力改进它。我想使用一些C++11
功能,由于Debian Wheezy
附带了g++4.7
,我想我会使用它
因此,我安装了MTL2
,并尝试编译该项目。但我发现一个错误,因为不知道
error: expected type-specifier before ‘ptrdiff_t’
error: expected ‘>’ before ‘ptrdiff_t’
error: template argument 4 is invalid
我在谷歌上搜索了一下,发现自从g++4.6
之后,标准标题中的一些内容发生了变化,我需要包含cstdef
标题,以便使ptrdiff\u t
成为大家熟知的(a)
因此,我将该标题包含到使用了ptrdiff_t的mtl2
文件中,并重新编译了该项目。然而,出现了一个新的错误:
In file included from /usr/local/include/mtl/matrix.h:41:0,
from /usr/local/include/mtl/mtl2lapack.h:20,
from MCl_Eigen.cpp:36:
/usr/local/include/mtl/envelope2D.h:72:20: error: declaration of ‘typedef struct mtl::twod_tag mtl::envelope2D<T>::dimension’ [-fpermissive]
In file included from /usr/local/include/mtl/matrix_implementation.h:25:0,
from /usr/local/include/mtl/matrix.h:33,
from /usr/local/include/mtl/mtl2lapack.h:20,
from MCl_Eigen.cpp:36:
/usr/local/include/mtl/dimension.h:19:7: error: changes meaning of ‘dimension’ from ‘class mtl::dimension<typename mtl::dense1D<T>::size_type>’ [-fpermissive]
make: *** [MCl_Eigen.o] Error 1
包含在/usr/local/include/mtl/matrix.h:41:0中的文件中,
从/usr/local/include/mtl/mtl2lapack.h:20,
根据MCl_特征值cpp:36:
/usr/local/include/mtl/envelope2D.h:72:20:错误:声明'typedef struct mtl::two d_tag mtl::envelope2D::dimension'[-fppermissive]
在/usr/local/include/mtl/matrix_implementation.h:25:0中包含的文件中,
来自/usr/local/include/mtl/matrix.h:33,
从/usr/local/include/mtl/mtl2lapack.h:20,
根据MCl_特征值cpp:36:
/usr/local/include/mtl/dimension.h:19:7:错误:将“dimension”的含义从“class mtl::dimension”[-fppermissive]更改为“dimension”
make:**[MCl_Eigen.o]错误1
我的问题是,是否有一种方法可以在g++4.7
编译器中使用mtl2
,还是使用更新的版本并使代码适应它更好?(或者使用与以前相同的编译器,g++4.4
)
(a)我将
cstdef
头直接包含在MTL
文件中。我是否应该在项目文件中执行此操作?该版本的Debian附带GCC4.6。也许先试试。嗨!我一定要试试。但是如果可能的话,我想使用最新版本来获得C++11
中的大部分资源。无论如何,我将尝试使用g++4.6
@Tshepang我用g++4.6
尝试过,但什么都没有。同样的错误。不过,使用g++4.4
进行得很顺利。有没有办法将C++11
的新功能与旧的MTL
版本一起使用?使用mtl4
有点困难,因为我必须迭代项目的源代码并修改它以匹配新版本。例如,mtl2
中的标题在新版本中找不到。我担心这是一个容易的问题。我对MTL不熟悉。我建议你在这个问题上悬赏。要么这样,要么继续问下去。这是世上最活跃的房间。好的!!谢谢我会在聊天室里问的!