error : 'nomVariable' cannot appear in a constant-expression
Bonjour à tous.
(Grâce à certains du forum) J'ai un code qui me permet de lire N octets pour les copier dans une variable de taille N :
Code:
1 2 3 4 5 6 7 8
| template <class T>
void read(T& val, const unsigned char* data, bool big_endian=true) {
const size_t size = sizeof(T);
unsigned char *ptr = reinterpret_cast<unsigned char*>(&val);
for(size_t i=0; i<size; ++i) {
ptr[big_endian ? size - i - 1 : i] = data[i];
}
} |
Le truc c'est que si val a pour taille 2 octets, je lis 2 octets mais dans mon programme ce n'est pas forcement le cas ! (val a pour taille 8octets mais je veux juste lire et copier 2 octets) Donc j'ai décidé de modifier un peu le code :
Code:
1 2 3 4 5 6 7 8 9
| template <class T>
void EndianTools::readnData(T& val, const size_t size, const unsigned char* data, int msb, int lsb, bool big_endian=true)
{
typedef typename unsigned_<size>::type type;
type *ptr = reinterpret_cast<unsigned char*>(&val);
for(size_t i=0; i<size; ++i)
ptr[big_endian ? size - i - 1 : i] = data[i];
} |
Je pensais pas trop prendre de risque en faisant ça mais le compilo me hurle dessus en disant : error : 'size' cannot appear in a constant-expression
Si quelqu'un pouvait m'expliquer ce qu'il se passe (oui j'ai envie de comprendre) et aurait une idée.