Reputation: 689
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
Upvotes: 0
Views: 1066
Reputation: 106068
Look at your error message: it's trying
ans &= check(..., int, int)
And that version of check returns a string. You need a boolean expression on the right hand side of &=
Upvotes: 2
Reputation: 31952
std::string CucumberMarket::check
It seems to be under the assumption that check returns string
. This is your issue, you are expected it to take the bool
returning one.
If you want it to work correctly, simplest fix would be to force cast price[i]
to long long
as below
for(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.
Upvotes: 7