I’m getting a strange error when I try to compile this:
class CucumberMarket {
public:
bool ans;
int n,cont,K,b;
bool check(const vector<int> &precios,long long price,int pos) {
++cont;
if(cont == K and b < price) ans = false;
if(!ans) return ans;
for(int i = pos + 1; i < n; ++i) {
if(cont < K) ans &= check(precios,price + precios[i],i);
}
--cont;
}
string check(vector <int> price, int budget, int k) {
n = price.size();
K = k;
b = budget;
ans = true;
cont = 0;
for(int i = 0; i < n and ans; ++i) ans &= (this -> check(price,price[i],i));
return ans ? "YES" : "NO";
}
};
This is what I’m getting:
C:\Users\Usuario\Desktop\Temp\C++\tc.cpp: In member function `std::string CucumberMarket::check(std::vector<int, std::allocator<int> >, int, int)':
C:\Users\Usuario\Desktop\Temp\C++\tc.cpp:24: error: no match for 'operator&=' in '((CucumberMarket*)this)->CucumberMarket::ans &= CucumberMarket::check(std::vector<int, std::allocator<int> >, int, int)(vector<int,std::allocator<int> >(((const std::vector<int, std::allocator<int> >&)((const std::vector<int, std::allocator<int> >*)(&price)))), (&price)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = int, _Alloc = std::allocator<int>](((unsigned int)i)), i)'
[Finished in 0.2s with exit code 1]
Line 24 is this:
for(int i = 0; i < n and ans; ++i) ans &= (this -> check(price,price[i],i));
I don’t get it, why am I getting this? I have done this before and it’s always compiled
std::string CucumberMarket::checkIt seems to be under the assumption that check returnsstring. This is your issue, you are expected it to take theboolreturning one.If you want it to work correctly, simplest fix would be to force cast
price[i]tolong longas belowfor(int i = 0; i < n and ans; ++i) ans &= (this -> check(price,(long long)price[i],i));I would recommend your overloads dont be so close together signature wise.