【问题标题】:reference to 'rank' is ambiguous对“等级”的引用是模棱两可的
【发布时间】:2018-06-18 04:13:53
【问题描述】:

我非常努力地找出我的错误在哪里!这是我的功能:

#include <iostream>
#include <algorithm>
using namespace std;
bool lessThan(int a , int b) {   return (a<b);   }

int rank(int a[] , int n , int value , int lo , int hi) {
    if(lo > hi)  return -1;
    int mid = (lo + hi) / 2;
         if(value < a[mid]) return rank(a , n , value , lo , mid - 1); 
    else if(value > a[mid]) return rank(a , n , value , mid + 1 , hi);
    else return mid;
}

int rank(int a[] , int n , int value) {
    sort(a , a + n , lessThan);
    return rank(a , n , value , 0 , n - 1);
}

这是一个检查数组是否包含值的函数。我以为我以错误的方式将数组传递给 rank() 所以我尝试了这个:

void test(int a[] , int n) {
         for(int i = 0 ; i < n ; ++i) cout << a[i];
    }

但它奏效了,让我很困惑。请告诉我我的错误在哪里。

【问题讨论】:

  • 请显示完整的未经编辑的错误消息,包括相关的行号。

标签: c++11 compiler-errors


【解决方案1】:

使用-std=c++03 模式编译代码或更改rank 名称,因为从c++11 开始,库中有rank 结构-rank。您可以删除using namespace std; 行以避免此错误,但是您需要在每次调用标准库函数(即std::sort)之前添加std:: 前缀。

【讨论】:

  • 现在可以使用了。非常感谢 。但我对您的回答有一个疑问:您说在 library-rank 中有 rank struct 。但我没有#include 它在我的程序中。那么为什么编译器让我出错。
  • @VănHữu rank 定义在 type_traits 标头中,您没有明确包含此文件,但它已包含在 algorithm 标头中。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2015-09-20
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多