Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ISO C++ forbids casting to an array type 'double [3]'

5 réponses
Avatar
meow
message g=E9n=E9r=E9 par :
std::vector<double[3]> coefs(this->degree());

1=2E Mais pourquoi donc est-ce interdit ? dangereux ?
2=2E qu'est-ce que je peux utiliser d'autre ? pas un vector ! j'ai juste
besoin de tableaux de taille fixe sur lesquels je puis utiliser []...
faut t'il aller jusqu'=E0 la red=E9finition d'une classe template<int n>
tableau ?

5 réponses

Avatar
adebaene

message généré par :
std::vector<double[3]> coefs(this->degree());

1. Mais pourquoi donc est-ce interdit ? dangereux ?


Pour pouvoir instancier vector<T>, il faut que T soit
default-constructible et assignable. double[3] n'a aucune de ses 2
propriétés.

2. qu'est-ce que je peux utiliser d'autre ? pas un vector ! j'ai juste
besoin de tableaux de taille fixe sur lesquels je puis utiliser []...
faut t'il aller jusqu'à la redéfinition d'une classe template<int n>
tableau ?
boost::array l'a déjà fait pour toi...


Arnaud

Avatar
meow
Okay, merci tout plein.
Juste pour etre certain : je supposes que "T est assignable" signifie
qu'il implémente operator= ?
Avatar
kanze
wrote:

message généré par :
std::vector<double[3]> coefs(this->degree());

1. Mais pourquoi donc est-ce interdit ? dangereux ?


Pour pouvoir instancier vector<T>, il faut que T soit
default-constructible et assignable. double[3] n'a aucune de
ses 2 propriétés.


Copy-constructible, non default-constructible.

En fait, un double[3] est default-constructible. Plus ou moins,
selon la contexte : je peux bien écrire « double x[3] ;», voire
« new double[ 3 ] », mais pas « double[ 3 ]() » (pour en avoir
une instance temporaire).

2. qu'est-ce que je peux utiliser d'autre ? pas un vector !
j'ai juste besoin de tableaux de taille fixe sur lesquels je
puis utiliser []... faut t'il aller jusqu'à la redéfinition
d'une classe template<int n> tableau ?


boost::array l'a déjà fait pour toi...


C'est sans doute la solution la plus simple. Sinon, ce n'est pas
bien difficile non plus de l'emballer dans une struct.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
meow wrote:

Juste pour etre certain : je supposes que "T est assignable"
signifie qu'il implémente operator= ?


Il y a un peu plus. En gros, il faut que l'expression « a = b »
soit légale (en supposant que a et b ont type T), et qu'après, a
et b sont équivalent. (Donc, std::auto_ptr n'est pas assignable,
operator= ou non.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
meow
limpide, comme d'habitude. Merci.