-1

我正在学习 C++ 中的函数模板,所以我编写了一个简单的函数来删除重复项。但是编译器会抛出以下错误。

removeDup is not a function or static data member

using namespace std;  
template <typename T>  
void removeDup(std::vector<T>& vec)  
{  
        std::sort(vec.begin(), vec.end());  
        vec.erase(std::unique(vec.begin(), vec.end()), vec.end());  
}  

可能是什么问题呢?

4

2 回答 2

3

来自编译器的错误通常是相关的。例如,如果您不匹配大括号,可能会导致许多不在范围内的标识符。很多时候,第一个是根本原因,很容易忽视其余的。在这种情况下,重要的是后面的错误,而第一个错误远非显而易见。

未能包含堆栈使 removeDup 让编译器感到困惑,它首先抱怨 removeDup。

添加后的代码对我来说编译得很好:

#include <vector>
#include <algorithm>

using namespace std;

没有这些包括,这是我从 gcc 4.2 (silly Mac) 得到的错误:

template.cpp:6: error: variable or field ‘removeDup’ declared void
template.cpp:6: error: ‘vector’ is not a member of ‘std’
template.cpp:6: error: expected primary-expression before ‘&gt;’ token
template.cpp:6: error: ‘vec’ was not declared in this scope

第一行与以下内容非常接近:

removeDup is not a function or static data member
于 2012-09-14T22:06:32.300 回答
2

这对我来说很好:

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;  
template <typename T>  
void removeDup(std::vector<T>& vec)  
{  
        std::sort(vec.begin(), vec.end());  
        vec.erase(std::unique(vec.begin(), vec.end()), vec.end());  
}  

int main()
{

    int values[] = {1,2,3,3,3};
    vector<int> ints(values, values + 5);
    removeDup(ints);

    for (vector<int>::iterator it=ints.begin(); it!=ints.end(); ++it)
        cout << " " << *it;
    return 0;
}

$ g++ c.cpp
$ ./a.out
1 2 3
于 2012-09-14T22:11:17.887 回答