Connecting Tech Pros Worldwide Help | Site Map

template function within template class

  #1  
Old July 19th, 2005, 05:19 PM
Itchy
Guest
 
Posts: 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];

};
  #2  
Old July 19th, 2005, 05:19 PM
Victor Bazarov
Guest
 
Posts: n/a

re: template function within template class


"Itchy" <tobhe067@student.liu.se> wrote...[color=blue]
> 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()[/color]

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.
[color=blue]
>
> /Itchy
>[/color]

/*****************************************/
#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


Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
template functions in template class shuisheng answers 1 September 25th, 2006 05:15 AM
Error compiling template function within class template uvts_cvs@yahoo.com answers 4 July 22nd, 2005 11:02 PM
Error compiling template function within class template uvts_cvs@yahoo.com answers 2 July 22nd, 2005 11:02 PM
Friend Function in Template Class Trevor Lango answers 5 July 22nd, 2005 06:04 AM