【问题标题】:C++ undeclared identifier vectorC++ 未声明的标识符向量
【发布时间】:2014-02-15 11:09:05
【问题描述】:

我有以下代码用于快速排序。 当我编译代码时,它显示以下错误:

错误 C2065:“向量”:未声明的标识符
错误 C2062:int 类型:意外
错误 C3861:“快速排序”:找不到标识符

#include "iostream"
#include "conio.h"
#include "vector"
void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);

using namespace std;

int main()
{   vector<int> unsorted;
    int n,x,y;
//cout<<"Initial size: "<<unsorted.size()<<"\n Capacity: "<<unsorted.capacity();
cout<<"Enter the size: ";
cin>>n;
cout<<"Enter the elements in unsorted array: "<<endl;

for(int a=0;a<n;a++)
{
    cin>>x;
        unsorted.push_back(x);
}
for(int b=0;b<n;b++)
{
cout<<unsorted[b]<<"\t";
}


x=1;
y=n;
 quicksort(unsorted,x,y); //quicksort(array,1,array.length)

 for(int m=0;m<n;m++)
 {
 cout<<unsorted[m]<<"\t";
 }
 return 0;
}


int partition(vector<int> given,int p,int r)
{
    int pivot,i,j;
    pivot=given[r];
    i=p-1;
    for(j=p;j<r-1;j++)
    {
        if(given[j]<pivot)
            i++;
        swap(given[i],given[j]);
    }
    swap(given[i+1],given[r]);
    return i+1;

}

void quicksort(vector<int> given,int p,int r)
{   int q;

    if(p<r)

     q= partition(given,p,r);
     quicksort(given,p,q-1);
     quicksort(given,q+1,r);
}

【问题讨论】:

  • 括号,不是引号:#include &lt;iostream&gt;#include &lt;vector&gt;
  • 适当的缩进/格式会很好。
  • 这并不能解决问题。
  • 并把函数声明放在using namespace std;后面
  • 另外,您的快速排序函数不会修改传入的向量,而是修改它的副本,因此您可能希望通过引用传递它。

标签: c++ visual-c++-2010


【解决方案1】:

move : using namespace std; 以上快速排序声明

void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);

using namespace std;

或更好地转储using namespace std,并更改为:

void quicksort(std::vector<int>,int,int);
int partition(std::vector<int>,int,int);

【讨论】:

  • 然后阅读this,将其删除,并正确限定名称。
【解决方案2】:

vector,就像标准库中的几乎所有东西一样,位于命名空间std;所以名称需要限定。还需要通过引用来取向量,否则函数会排序一个本地副本,没有任何用处。

void quicksort(std::vector<int> &, int, int);
               ^^^^^            ^

在其当前形式中,其余代码不需要限定标准名称,因为using namespace std; 将您需要的所有内容以及更多内容转储到全局命名空间中。这是一个坏主意,因为其中一些名称(例如partition)可能与您要声明自己的名称发生冲突。您应该删除 using 指令,并限定您使用的其他标准名称(如 std::cout)。

【讨论】:

  • @MikeSeymour 完成你所说的所有更改后,当我运行程序时,出现向量下标异常。请帮助。
  • @AbhishekJain:这意味着您正在使用超出范围的索引访问向量。在调试器中单步调试程序以找出位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多