我有一个要在Windows上编写的程序,其中使用了std :: vector的排序功能。它工作正常,但是在Linux上编译时,出现错误消息:
在此范围内未声明'sort'
我需要使用某种Linux友好版本吗?
class Bigun {
private:
std::vector<Other*> others;
};
void Bigun::sortThoseOthers() {
sort(others.begin(), others.end(), compareOthers);
}
答案 0 :(得分:3)
sort
on either platform中没有函数std::vector
,所以我假设您使用的std::sort
的迭代器范围为std::vector
。
这很好,很正确。
错误消息提示两件事:
您正在写sort
,而不是std::sort
。只要您编写了using namespace std
,它就会起作用,尽管使用完全限定的名称会更好。继续。
您没有写#include <algorithm>
,而是依靠“传递性包含”,也就是说,假设其他标头本身包含<algorithm>
,很可能是偶然的情况用于Visual Studio实现,但不能用于libstdc ++或libc ++。
您应始终包括适当的标准头,以确保可移植性。不要仅仅因为您的程序在某些特定系统上没有它们就可以正常工作而忽略它们。
在这里做,我敢打赌你的问题会消失的。
通常,除非存在标准合规性和/或工具链错误的问题,否则标准功能在整个操作系统中都是相同的。这就是为什么它们是标准的。
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> v{5,3,4,1,2};
std::sort(v.begin(), v.end());
for (const auto& el : v)
std::cout << el << ' ';
std::cout << '\n';
}
// Output: 1 2 3 4 5