错误:“无穷大”未命名类型

error: ‘infinity’ does not name a type

本文关键字:无穷大 未命名 类型 错误      更新时间:2023-10-16

我有一个包含许多 cpp 文件的程序,我尝试创建一个 makefile,但当我运行它时,我遇到了一些与此函数相关的错误:

void replace_infinites(cv::Mat_<int>& matrix) {
const unsigned int rows = matrix.rows,columns = matrix.cols;
//  assert( rows > 0 && columns > 0 );
if(rows==0 || columns==0)
    return;
double max = matrix(0, 0);
const auto infinity = std::numeric_limits<int>::infinity();
// Find the greatest value in the matrix that isn't infinity.
for ( unsigned int row = 0 ; row < rows ; row++ ) {
    for ( unsigned int col = 0 ; col < columns ; col++ ) {
        if ( matrix(row, col) != infinity ) {
            if ( max == infinity ) {
                max = matrix(row, col);
            } else {
                max = std::max<int>(max, matrix(row, col));
            }
        }
    }
}
// a value higher than the maximum value present in the matrix.
if ( max == infinity ) {
    // This case only occurs when all values are infinite.
    max = 0;
} else {
    max++;
}
for ( unsigned int row = 0 ; row < rows ; row++ ) {
    for ( unsigned int col = 0 ; col < columns ; col++ ) {
        if ( matrix(row, col) == infinity ) {
            matrix(row, col) = max;
        }
    }
}

}我试图包括:

#include <limits> 
using namespace std;

但是当我编译我的程序时,我收到这些错误:

munkres.cpp: In function ‘void replace_infinites(cv::Mat_<int>&)’:
munkres.cpp:44:16: error: ‘infinity’ does not name a type
munkres.cpp:49:38: error: ‘infinity’ was not declared in this scope
munkres.cpp:60:17: error: ‘infinity’ was not declared in this scope
munkres.cpp:69:38: error: ‘infinity’ was not declared in this scope

在网上做了很多研究,但我没有得到任何解决方案来解决我的问题。

您似乎没有使用 C++11 或更高版本进行编译,因为您的编译器抱怨以下行:

const auto infinity = std::numeric_limits<int>::infinity();

假设您确实包含#include <limits>,除了使用auto之外,该行没有任何问题。如果没有 C++11,编译器就不知道auto是什么。使用 C++11 或更高版本进行编译,或将auto更改为 int

不相关,这在评论中指出,但使用 numeric_limits<int>::infinity 是一种可怕的、可怕的检查方式。对无穷大进行int比较没有任何意义。更喜欢使用numeric_limits<int>::max(或其他适合您目的的东西)。