Armadillo / Xcode:“仅返回类型不同的函数不能被重载”错误无处不在

Posted

技术标签:

【中文标题】Armadillo / Xcode:“仅返回类型不同的函数不能被重载”错误无处不在【英文标题】:Armadillo / Xcode: "functions that differ only in their return type cannot be overloaded" error from nowhere 【发布时间】:2014-03-13 11:06:45 【问题描述】:

首先,我知道之前有人对这个问题提出过疑问,我的情况有所不同。

我正在将Armadillo 矩阵库用于 Xcode 中的一个研究项目。我对这个项目很深入,到目前为止,我还没有遇到任何问题。然而,我最近进行了一系列更改,当我尝试重新编译项目时,尽管没有对 Armadillo 头源文件进行任何更改,但仍出现以下错误。

In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/main.cpp:16:
In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/TPS_RPM.h:19:
In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/T_Params.h:14:
In file included from /usr/include/armadillo:121:
/usr/include/armadillo_bits/lapack_bones.hpp:239:8: error: functions that differ only in their return type cannot be overloaded
  void arma_fortran(arma_sgetrf)(blas_int* m, blas_int* n,  float* a, blas_int* lda, blas_int* ipiv, blas_int* info);
       ^
In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/main.cpp:16:
In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/TPS_RPM.h:19:
In file included from /Users/willandrew/Work/1-4th-Year/1Project/code/TPS-RPM(LAPACK)/TPS-RPM(LAPACK)/T_Params.h:14:
In file included from /usr/include/armadillo:42:
/usr/include/armadillo_bits/compiler_setup.hpp:36:34: note: expanded from macro 'arma_fortran'
  #define arma_fortran(function) arma_fortran2_noprefix(function)
                                 ^
/usr/include/armadillo_bits/compiler_setup.hpp:25:44: note: expanded from macro 'arma_fortran2_noprefix'
  #define arma_fortran2_noprefix(function) function##_
                                           ^
<scratch space>:203:1: note: expanded from here
sgetrf_
^

错误列表(都是相似的)一直持续到 Xcode 停止编译,因为错误太多。我在重新编译之前所做的更改包括添加一个新类和修改一些函数定义。然而不幸的是,我无法撤消对每个文件所做的更改以找到错误,因为我必须重新启动计算机。我已经调查了这个错误,我确定我没有定义其他具有相同名称和不同返回类型的方法。

这个问题有点过分......但是有人对错误的含义和/或我可以尝试做什么有一点暗示吗?如果您希望我添加任何源代码/其他错误,请告诉我,并提前致谢

【问题讨论】:

我相信这是您在 XCode 中启用版本控制的提示。 我已经启用了VC... 您可能在某处有错误的#define,或者您正在创建一个名为arma_sgetrfarma_sgetrf_sgetrfsgetrf_ 的新函数,这与现有函数发生冲突。我强烈建议使用 svn 或 git 等版本控制系统,这样您以后就可以撤消类似的更改。或者,在对代码进行大量更改之前,请备份包含源代码的文件夹。 谢谢,我现在定期推送到 github 存储库。通过降级到 Xcode 5.0.2 设法解决了这个问题 【参考方案1】:

我遇到了同样的问题。当我在我的 *.mm、*.h、*.cpp、*.hpp 文件中将“犰狳”头包含在所有其他包含/导入之上时,它得到了解决。

#include "armadillo"
#include <stdlib.h>

【讨论】:

【参考方案2】:

终于解决了这个问题,虽然我不知道是什么问题。

在对项目进行重大更改期间,我升级到了最新的 Xcode。降级回 5.0.2 似乎已经解决了上述问题。警惕 Xcode 5.1

【讨论】:

以上是关于Armadillo / Xcode:“仅返回类型不同的函数不能被重载”错误无处不在的主要内容,如果未能解决你的问题,请参考以下文章

链接器错误、Xcode 5 和 Armadillo:“找不到 -larmadillo.4.0.2 的库”

尝试使用 Armadillo 库运行示例时出现 Xcode C++ 链接器错误

犰狳:乘法时出错

在 C++ Xcode 中链接犰狳库

C++ Armadillo 和 OpenMp:外积求和的并行化 - 定义 Armadillo 矩阵的约简

Armadillo + OpenBLAS 多线程