2016-02-13 33 views
1

在此代碼中,第35行的abs()函數出現錯誤。編譯器我選擇了:C++(4.3.2)C++中的abs()錯誤

看起來錯誤在底部。

void bfs(pair<int,int> pixelpos){ 
bfsq.push(pixelpos); 
int u,v,i,j; 
pair<int,int> tmpq; 
while(!bfsq.empty()){ 
    tmpq = bfsq.front(); 
    u = tmpq.first; v = tmpq.second; 
    bfsq.pop(); 
    r(i,u-square_dist,u+square_dist) r(j,v-square_dist,v+square_dist) 
     if(inrange(i,j)){ 
     // ERROR HERE DOWN IN abs() fn 
     int dist = abs(pixelpos.first - i) + abs(pixelpos.second -j); // Line: 35 
     if(graph[i][j]>dist){ 
      graph[i][j] = dist; 
      bfsq.push(pair<int,int> (i,j)); 
      } 
     } 
} 

prog.cpp:在函數 'void BFS(標準::對)':

prog.cpp:35:錯誤:重載 'ABS(INT)' 的呼叫是模糊

/usr/include/c++/4.3/cmath:99:注意:候選人是:雙重std :: abs(雙重) /usr/include/c++/4.3/cmath:103:注意:float std :: abs (float)

/usr/include/c++/4.3/cmath:107:note:long double std :: abs(long double)

prog.cpp:35:錯誤:重載 'ABS(INT)' 的呼叫是不明確的

/usr/include/c++/4.3/cmath:99:注:候選是:雙STD: :ABS(雙)

/usr/include/c++/4.3/cmath:103:注:浮動的std :: ABS(浮動)

/usr/include/c++/4.3/cmath:107:注意:long double std :: abs(long double)

可能是什麼原因?

+0

*「C++(4.3.2)」 * - 這不是一個編譯器。你的意思是GCC? –

+2

@imvamshi我認爲原因是你沒有包含標題

+0

@ChristianHackl是的。我忘了提及。其GCC v4.3.2 – imvamshi

回答

3

錯誤的原因可能是您沒有包含標頭<cstdlib>

#include <cstdlib> 

標準C功能

int abs(int j); 

在C頭<stdlib.h>被聲明。

雖然C++標準允許放置標準C的名字在全局命名空間但最好是使用合格的名稱,例如

int dist = std::abs(pixelpos.first - i) + std::abs(pixelpos.second -j);