使用对向量时,无效的数字模板参数错误

时间:2014-06-11 06:38:06

标签: c++ templates vector stl std-pair

基于的代码中有两种类型的错误 矢量> VG(n)的 我无法纠正

  1. 在最后一行,即; return 0语句有一个错误,说“错误的模板参数数量(1,应该是2)”和一个Line:87链接到STL库,上面写着“提供给'模板struct std :: pair”
  2. 函数的第一行(第7行)表示模板参数无效

  3.  #include <utility>
     #include <cmath>
     #include<cstdio>
     #include <vector>
    
     using namespace std
    
     #define COMP(a,b,xx,yy)(sqrt(((a-xx)*(a- xx)) + ((b-yy)*(b-yy))))
    
     double radius ( vector<pair<(int, int)> > vk, int ii, int n)
     {             //error:template argument 1,2 is invalid
     int d=n;
      int xx=vk[ii].first;
      int yy=vk[ii].second;
      int k = ii==0? 1:0;
    
      double small=COMP(vk[k].first,vk[k].second,xx,yy);
       double dd;
       for (int i=0;i<d; i++)
      {
       if (i!=ii)
       dd=COMP(vk[i].first,vk[i].second,xx,yy);
       {
    
       if (small>dd)
       small=dd;
       }
       }
       return small;
      }
    
       int main()
      {
       int t,n=1;
      int k=0;
      double r,l;
      //Enter the value of t
       scanf("%d",&t);
      while (t--)
      {
      scanf("%d",&n);// Enter the value of n
      vector <pair <int, int> > vg(n);
    
       for (int i=0; i<n; i++)
       {
       scanf("%i %i",&vg[i].first,&vg[i].second);  
    
       //Enter the value of x and y co-odinates
    
       }
       for (int i=0; i<n; i++)
        {
       r=radius(vg,i,n);
        l= (round(r*100.00))/100.00;
    
    
        printf("%g\t%i\n",l);
        }  
        }
        return 0;  
         /* Error: wrong number of template arguments (1, should be 2)|
         provided for ‘template<class _T1, class _T2> struct        
          std::pair’|*/ 
      }
    

3 个答案:

答案 0 :(得分:0)

它应该是std::vector<std::pair<int, int> >,虽然我不知道你为什么要通过值而不是const引用来传递它。

答案 1 :(得分:0)

在函数声明中,删除vector模板类型周围的括号:

double radius ( vector<pair<int, int> > vk, int ii, int n)

一些注意事项:

  • 始终检查scanf的返回值
  • 避免按{/ 1>的值传递vectors
  • 首选C ++ iostreams为C风格的printfs / scanf
  • 用内联函数替换COMP
  • 正确缩进代码

答案 2 :(得分:0)

我看到以下问题:

<强>一

using namespace std

缺少;。它应该是

using namespace std;

两个

double radius ( vector<pair<(int, int)> > vk, int ii, int n)

应该是

double radius ( vector<pair<int, int> > vk, int ii, int n)

<强>三

printf("%g\t%i\n",l);

您有两个格式说明符,但只有一个值传递给函数。