Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的abs()错误+;_C++_Overloading - Fatal编程技术网

C++ c+中的abs()错误+;

C++ c+中的abs()错误+;,c++,overloading,C++,Overloading,代码第35行的abs()函数出现错误。我选择的编译器:c++(4.3.2) 看看下面的错误 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();

代码第35行的abs()函数出现错误。我选择的编译器:c++(4.3.2)

看看下面的错误

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));
          }
      }
}
void bfs(成对像素点位置){
bfsq.push(pixelpos);
int u,v,i,j;
配对tmpq;
而(!bfsq.empty()){
tmpq=bfsq.front();
u=tmpq.first;v=tmpq.second;
bfsq.pop();
r(i,u形方格区,u+方格区)r(j,v形方格区,v+方格区)
if(范围(i,j)){
//下面的abs()中出现错误fn
int dist=abs(pixelpos.first-i)+abs(pixelpos.second-j);//行:35
if(图[i][j]>dist){
图[i][j]=距离;
bfsq.push(对(i,j));
}
}
}
prog.cpp:在函数“void bfs(std::pair)”中:

prog.cpp:35:错误:重载“abs(int)”的调用不明确

/usr/include/c++/4.3/cmath:99:注:候选项为:double std::abs(double) /usr/include/c++/4.3/cmath:103:注:浮点std::abs(浮点)

/usr/include/c++/4.3/cmath:107:注:长双精度标准::abs(长双精度)

prog.cpp:35:错误:重载“abs(int)”的调用不明确

/usr/include/c++/4.3/cmath:99:注:候选项为:double std::abs(double)

/usr/include/c++/4.3/cmath:103:注:浮点std::abs(浮点)

/usr/include/c++/4.3/cmath:107:注:长双精度标准::abs(长双精度)


原因可能是什么?

错误的原因可能是您没有包含标题

在C头
中声明

<>虽然C++标准允许在全局命名空间中放置标准C名,但是最好使用限定名称,例如< /P>
int dist = std::abs(pixelpos.first - i) + std::abs(pixelpos.second -j);

“c++(4.3.2)”-那不是编译器。你是说GCC吗?@imvamshi我想原因是你没有包含头@ChristianHackl是的。我忘了提到。它是GCC v4.3.2
int abs(int j);
int dist = std::abs(pixelpos.first - i) + std::abs(pixelpos.second -j);