如何修复我的 C++ 代码? (与运营商不匹配)
How can I fix my C++ code ? (no match for operators)
如何修复我的 C++ 代码? (与运营商不匹配)
我收到一个错误:“operators-”不匹配。可能是什么问题,我该如何解决?
有人可以帮我解决吗?
error: no match for 'operator-' (operand types are 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'} and 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'})|
#include <iostream>
#include <set>
using namespace std;
int main()
{
int O;
int N;
int M;
cin >> O >> N >> M;
int tanarsorszama[O];
int tantargysorszama[O];
int nap [O];
int ora [O];
for(int i=0; i<O; i++)
{
cin >> tanarsorszama[i] >> tantargysorszama[i] >> nap[i] >> ora[i];
}
int dblyukas[N]={0};
set<int>orai;
for(int i=0; i<N; i++)
{
for(int k=1; k<6; k++)
{
orai.clear();
for(int j=0; j<9; j++)
{
if(tanarsorszama[i]!=0 && ora!=0 && nap[k]!=0)
{
orai.insert(ora[j]);
}
}
if (orai.size() > 1)
{
dblyukas[i] += orai.end() - orai.begin() +1 - orai.size(); // There is the error
}
}
}
return 0;
}
std::set
没有随机访问迭代器。这就是您收到错误的原因。
要访问集合的第一个和最后一个元素,请使用 orai.begin()
和 std::prev(orai.end())
。这些 return 迭代器,必须使用 operator* 取消引用。所以,纠正我认为你打算做的事情,会导致以下结果:
if (orai.size() > 1)
{
dblyukas[i] += *std::prev(orai.end()) - *orai.begin() +1 - orai.size(); // There is the error
}
如何修复我的 C++ 代码? (与运营商不匹配) 我收到一个错误:“operators-”不匹配。可能是什么问题,我该如何解决? 有人可以帮我解决吗?
error: no match for 'operator-' (operand types are 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'} and 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'})|
#include <iostream>
#include <set>
using namespace std;
int main()
{
int O;
int N;
int M;
cin >> O >> N >> M;
int tanarsorszama[O];
int tantargysorszama[O];
int nap [O];
int ora [O];
for(int i=0; i<O; i++)
{
cin >> tanarsorszama[i] >> tantargysorszama[i] >> nap[i] >> ora[i];
}
int dblyukas[N]={0};
set<int>orai;
for(int i=0; i<N; i++)
{
for(int k=1; k<6; k++)
{
orai.clear();
for(int j=0; j<9; j++)
{
if(tanarsorszama[i]!=0 && ora!=0 && nap[k]!=0)
{
orai.insert(ora[j]);
}
}
if (orai.size() > 1)
{
dblyukas[i] += orai.end() - orai.begin() +1 - orai.size(); // There is the error
}
}
}
return 0;
}
std::set
没有随机访问迭代器。这就是您收到错误的原因。
要访问集合的第一个和最后一个元素,请使用 orai.begin()
和 std::prev(orai.end())
。这些 return 迭代器,必须使用 operator* 取消引用。所以,纠正我认为你打算做的事情,会导致以下结果:
if (orai.size() > 1)
{
dblyukas[i] += *std::prev(orai.end()) - *orai.begin() +1 - orai.size(); // There is the error
}