Hi!
I just don't understand why my compiler complains about this line in
my program (see below). Maybe you can help me?
You can skip all the overloaded operators. I've marked the problem
areas. I get error in function generate_subkeys()
/Itchy
/*****************************************/
#include <bitset>
using namespace std;
template <size_t bits>
class Block : public bitset<bits>
{
public:
bool operator[](size_t pos) const
{
return bitset<bits>::operator[]((bits - pos) % bits);
}
reference operator[](size_t pos)
{
return bitset<bits>::operator[]((bits - pos) % bits);
}
Block& operator<<=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) b[i - pos] = (*this)[i];
return (*this = b);
}
Block& operator>>=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) b[i + pos] = (*this)[i];
return (*this = b);
}
Block operator<<(size_t pos) { return (Block(*this) <<= pos); }
Block operator>>(size_t pos) { return (Block(*this) <<= pos); }
/********* LOOK HERE!! PROBLEM
**********************************/
template <size_t subbits>
Block<subbits> subset(size_t left, size_t right)
{
Block<subbits> b;
for (int i = left; i <= right; i++) b[i - left + 1] = (*this)[i];
return b;
}
};
class DES
{
public:
//protected:
void apply_pc1()
{
for (int i = 1; i <= 56; i++) newkey[i] = key[PC1[i - 1]];
}
void generate_subkeys()
{
Block<28> left;
bool b;
//, right;
for (int r = 1; r <= 16; r++)
{
/********* LOOK HERE!! PROBLEM
**********************************/
// IT CANT FIND MY TEMPLATE FUNCTION. COMPILER SAYS IT RETURNS
BOOL?!?!
left = newkey.subset<28>(1, 28); // <----- ERROR
}
}
private:
Block<64> key;
Block<56> newkey;
Block<28> subkeys[16];
};