ISO C++ forbids casting to an array type 'double [3]'
5 réponses
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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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...
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
meow
Okay, merci tout plein. Juste pour etre certain : je supposes que "T est assignable" signifie qu'il implémente operator= ?
Okay, merci tout plein.
Juste pour etre certain : je supposes que "T est assignable" signifie
qu'il implémente operator= ?
Okay, merci tout plein. Juste pour etre certain : je supposes que "T est assignable" signifie qu'il implémente operator= ?
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
adebaene@club-internet.fr 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
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
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
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
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