By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,820 Members | 1,187 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,820 IT Pros & Developers. It's quick & easy.

template function within template class

P: n/a
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];

};
Jul 19 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
"Itchy" <to******@student.liu.se> wrote...
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()
As soon as I removed the second operator[] ('reference' was undefined)
and changed all other places were it was used, the code compiles. It
is possible that your compiler is not good enough. Visual C++ v6 is
like that. You should consider getting a better compiler if yours is
VC++ v6 and you want to be able to handle member templates.

/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);
}

Block& operator<<=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) (*this)[i];
return (*this = b);
}

Block& operator>>=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) (*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++) (*this)[i];
return b;
}
};

int PC1[10];

class DES
{
public:

//protected:
void apply_pc1()
{
for (int i = 1; i <= 56; 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];

};

int main()
{
DES des;
des.generate_subkeys();

return 0;
}

Victor
Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.