Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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++_Templates - Fatal编程技术网

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

函数模板中的奇怪错误 我正在学习C++中的函数模板,所以我写了一个简单的函数来删除重复。但是编译器抛出以下错误,c++,templates,C++,Templates,removeDup不是函数或静态数据成员 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()); } 使用名称空

removeDup不是函数或静态数据成员

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());  
}  
使用名称空间std;
模板
删除无效内容(标准::向量和向量)
{  
排序(vec.begin(),vec.end());
vec.erase(std::unique(vec.begin()、vec.end()、vec.end());
}  

可能是什么问题?

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

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

在添加以下内容后,代码对我来说很好:

#include <vector>
#include <algorithm>
第一行非常接近于:

removeDup is not a function or static data member

这对我来说很好:

#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
#包括
#包括
#包括
使用名称空间std;
模板
删除无效内容(标准::向量和向量)
{  
排序(vec.begin(),vec.end());
vec.erase(std::unique(vec.begin()、vec.end()、vec.end());
}  
int main()
{
int值[]={1,2,3,3,3};
向量整数(值,值+5);
移除(ints);
对于(vector::iterator it=ints.begin();it!=ints.end();++it)

编辑后我觉得cout很好。告诉我们您是如何调用它的。是哪一行生成了错误?是在这里显示的代码中,还是在您试图调用函数的地方?您没有提供足够的信息:哪一行触发了错误,您包含了哪些文件,编译单元中还有哪些其他代码……是的,OP留下了out,但这不太可能是错误消息的原因(您可能会得到类似于“
sort
不是
std
的成员”这样的信息是的,我明白了,我补充说缺少
#include
指令不太可能是OP出现问题的原因。OP需要向我们展示他是如何调用函数的,但我认为这不是一个有用的答案。为了详细说明…这是gcc输出的缺少头文件:.VS给出了类似的结果。giv和e“removeDup不是函数或静态数据成员”。现在,它可能是由于缺少标头造成的,在这种情况下,错误消息就是错误的(或者OP没有发布所有的消息),但我认为更可能的是,由于完全不同的原因,该错误实际上发生在调用站点。@EdS。我也会这样想,但由于第一个错误匹配得非常接近(并且我在发布之前运行了它,我只是最初没有添加编译器输出)我是说,你可能是对的,没有更多的信息我们无法知道。我不会对你的回答投反对票。
#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