|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
Bonjour,
j'ai un problème lorsque j'essaye de générer une multiarray membre d'une classe et de l'utiliser par la suite. dans le .h j'ai mis ça : Code :
et dans le .cpp associé à la classe. je veux resize la matrice data. (les 2 c'est juste pour l'essai. normalement c'est des size_x,size_y, etc ...) si je fais ça j'ai les erreur suivantes: Citation:
Citation:
|
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 553 ![]() |
Bonjour,
quelle est la ligne 75 du .h ? L'erreur vient clairement de là. Ensuite, sur la doc de boost, l'exemple n'est pas identique au tien: Code :
|
||
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
arf oui désolé.
la ligne 75 de mon .h ça correspond à la ligne 4 dans l'extrait que j'ai mis. la ligne : Code :
array_type data(boost::extents[1][1][1][1][1]); Citation:
|
|
|
|
00
|
|
|
#4 | |||
|
Membre à l'essai
![]() Ingénieur développement logiciels Inscription : février 2013 Messages : 23 ![]() |
Citation:
A mon humble avis, tu ferais bien de retirer le namespace boost:: de boost::extents. Tu définis une variable extents la ligne juste au dessus (array_type::extent_gen extents;). Par contre, tu ne l'utilises pas. Mais tu vas chercher un symbol extents dans le namespace boost, qui ne correspond pas à ce que tu veux. Peut-être que ce n'est pas ton erreur. En tout cas, c'est louche |
|||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
nan ça ne change rien.
par contre oui je suis d'accord avec ton argument. je sais pas pourquoi dans la doc de boost il remette boost::... mais bon c'est pas ça l'erreur. toujours le meme probleme de compilation sans ça. |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
arf je m'en sors toujours pas ...
j'ai beau parcourir l'aide de boost je vois pas. personne n'a d'idée du problème ? |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
Montre-nous les 80 premières lignes de ton .h, que l'on voit ce qui peut se passer.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
voici la totalité du .h :
Code :
|
||
|
|
00
|
|
|
#9 | ||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
voici la totalité du .h :
Code :
|
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
Je pense qu'eti_nne a raison.
Avec typedef boost::multi_array<float, 5> array_type;, array_type est un type. array_type::extent_gen extents; déclare extents comme une variable du type array_type::extent_gen. Donc array_type data(extents[1][1][1][1][1]); définit data comme un array_type en appelant un de ses constructeurs avec en argument la valeur de operateur[](operateur[](operateur[](operateur[](operateur[](extents,1),1),1),1),1)Ce qui n'est possible qu'en C++11 (et pas encore avec tous les compilateurs), et n'est pas ce que tu souhaites
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#11 | ||||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
donc en gros faut que à la place de:
Code :
Code :
je suis pas sur d'avoir compris. je peux pas essayer aujourd'hui mais je pourrais demain. c'est bien ça qu'il faut que j'essaye ? |
||||
|
|
00
|
|
|
#12 | |||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
Bon j'ai essayé de faire ce que j'avais noté, enlever l'extend en faisant :
Code :
Citation:
|
|||
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
L'initialisation se fait dans un constructeur, à moins d'être en C++11, et auquel cas, ce n'est pas encore gagné, selon le compilateur.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
oki, je retourne à mes tutoriels que j'ai un peu oublié sur les constructeurs alors
merci |
|
|
00
|
|
|
#15 | |||||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
lorsque j'insère l'initialisation dans un constructeur,
le compilage plante en me disant qu'il ne connais pas les variables que j'ai initialisé. Code :
Code :
Citation:
|
|||||
|
|
00
|
|
|
#16 | ||||
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
j'ai essayé comme ça aussi (d'après l'aide d'un forum C++ pour quelqu'un qui faisait à peu prêt pareil):
.h Code :
Code :
|
||||
|
|
00
|
|
|
#17 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 553 ![]() |
Bonjour,
sans faire avancer le schmilblik, trop de code à relire. Si ça compile c'est déjà pas mal, si "ça a cessé de fonctionné", tu as surement un accès mémoire interdit. Et pour ça, tu dois maintenant utiliser un debugger. Ce qui ne m'étonne pas particulièrement parce que... que ce code est moche ! Tu es en C++, tu utilises std::string et... tu utilises strcmp... C'est un peu de l'hérésie.. ![]() La fonction c_str est bien pratique mais c'est pas obligatoire de l'utiliser et en abuser à toutes les sauces ! Remercions la stl de surcharger les opérateurs pour pouvoir utiliser ce que nous faisons tous naïvement pour comparer des chaînes de caractères (et source de nombreux messages "pourquoi conschar*1 == constchar*2 est toujours faux ?"). Si vraiment tu veux garder le fonctionnement en méthode type strcmp, on a la méthode compare. Encore plus fort : pourquoi ajouter via string::c_str dans un vector de... string ? Egalement de nombreux header qui sont issus du C qui gagneraient à être remplacés par leur pendant C++. |
|
|
00
|
|
|
#18 |
![]() ![]() |
Salut,
Il y a, quand même, quelque chose qui m'échappe plus ou moins... Je n'arrive absolument pas à comprendre pourquoi la classe Images (qui, si j'ai bien compris, sert de gestionnaire d'images ![]() A priori, une image est une image, quelle que soit la chose qu'elle doit représenter. S'il te faut faire la différence entre une image et une autre, tu ne devrais avoir à le faire qu'au niveau d'un "identificateur unique" qui identifie de manière unique et non ambigüe une image particulière (le nom du fichier dont elle est tirée Si, comme je le comprends, Images est une collection d'images, alors, c'est que tu devrais avoir une classe (de base La manière dont les différents "graphismes" sont générés, manipulés, modifiés ne devant dépendre, au final, que du type d'images utilisé Si tu veux créer une image basée sur la valeur d'un réel, d'un entier ou d'une chaine de caractères, il faut juste de quoi convertir le rée ou l'entier en chaine de caractères et utiliser un seul algorithme qui permet de créer une image sur base de la chaine de caractères Si, pour une raison ou une autre, (parce que le score a augmenté de 100, par exemple), ce qui doit être représenté par l'image a été modifié, il "suffit" de recréer l'image avant de l'afficher bref, il me semble clairement y avoir un problème "quelque part" avec ta classe. Mais comme tu ne nous as pas dit jusqu'à présent ce que tu voulais faire de ta classe Images, il nous sera sans doute difficile de te dire comment y arriver
__________________
en bas de page
|
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
D'ailleurs, si tu veux un point de comparaisons, dans l'API OpenGL, les textures sont manipulés via des entiers, qui sont des indices dans un tableau interne à l'API
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#20 |
|
Membre du Club
![]() Inscription : juin 2007 Messages : 204 ![]() |
je vais commencer à répondre mais je pars bientot en conférence alors je finirais peut être plus tard.
alors oui j'ai pas utilisé de C++ depuis très longtemps, j'ai fait les tutoriel du site du zero et j'ai relu un bouquin de c++ pour me remettre dedans mais bien sur, il faut que je recode pour me rappeller du c++. pour les std::string. ba c'était de faire comme ça dans des tutoreils spécialisé C++ alors pour le moment j'ai "recopié" bêtement. avec l'expérience je comprendrais peut etre pourquoi il faut pas faire ça mais pour le moment je vois pas. pareil pour strcmp j'ai trouvé ça sur un site de c++ et j'ai réussi à m'en sortir avec du coup j'étais content. je sais pas pourquoi ça n'a pas sa place en c++. je vais regarder ton lien en tout cas merci ! pour le .c_str dans un vector de string, j'ai modifié des tableaux qui n'était pas des strings pour les faires passer en string dernièrement. fort bien possible que il y a des .c_str à enlever du coup. je vais regarder ça. merci ! pour la classe image elle comprend de nombreux tableaux parce que je fais du traitement d'images multi-modale. en gros à la fin je me retrouve avec un volume d'image, à plusieurs temps, pris à des endroits un peu différent dans l'espace, avec une fois sur deux ou une fois sur trois une modalité d'imagerie différente, et une fois sur deux un état de l'échantillon différent (expiration, inspiration). les tableaux servent à répertorier toutes les conditions d'imageries différentes et les variables qui entrent dans des équations pour calculer des phénomènes physiologique à partir de l'ensemble de ses images. les valeurs de certains de ses tableaux sont directement des variables de ses équations, d'autres servent à dire, cette équation va servir pour ces images, cette équation pour celles là etc ... l'image en cas d'inspiration tu va la pondérer avec telle fonction dépendant du temps si on souhaite utiliser ce modèle mathématique, avec telle autre si on souhaite utiliser un autre modèle mathématique. idème pour les images en cas d'expiration etc .... je voudrais que la classe image me serve à avoir toutes ses données à disposition, pour après à partir d'autres fonctions dépendant notamment des modèles pharmaco-cinétique que je veux utiliser je puisse modifier mes images avec mes pondérations et lancer les calculs des paramètres physiologique. voilà j'espère que c'est un peu plus claire. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com