|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Oct 2008
Messaggi: 12
|
[c++] Problema con puntatori
Attualmente nel mio programma C++ ho una classe che contiene un vettore di strutture "alfa".
Ogni struttura "alfa" contiene un vettore di TOT elementi. Questi TOT elementi però possono essere ripetuti in più strutture, quindi mi ritrovo con dei dati ridondanti. Avevo pensato di sostituire a tale vettore di TOT di elementi un vettore di TOT Puntatori e aggiungere alla classe un vettore con TUTTI gli elementi. Però non riesco a far funzionare il tutto a dovere. Ho fatto qualche prova con un programmino per vedere se in questo caso funziona, ma ho problemi anche qui. Probabilmente non ho capito a fondo come funzionano i puntatori. Credo che il problema sia in fase di inserimento del puntatore nel vettore (***), ma non riesco a risolverlo. Qualcuno mi può dare una mano? Ecco il codice: Codice:
//myClass.h
#include <vector>
struct myStr{
int a;
int b;
};
typedef myStr* pMyStr;
class myClass{
public:
std::vector<myStr> myVector;
std::vector<pMyStr> PmyVector;
myClass(void);
~myClass(void);
void setMyStr(int a1, int b1);
};
Codice:
// myClass.cpp
#include "MyClass.h"
myClass::myClass(void){
};
myClass::~myClass(void){
};
void myClass::setMyStr(int a1, int b1){
myStr temp;
temp.a = a1;
temp.b = b1;
myVector.push_back(temp);
// (***)
PmyVector.push_back(&myVector.back());
};
Codice:
//main.cpp
#include <windows.h>
#include <iostream>
#include "Myclass.h"
int main(){
myClass newClass;
for(int j=0;j<5;j++){
newClass.setMyStr(j,j);
}
std::cout<<"DIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.myVector.at(i).a<<" , b = "<<newClass.myVector.at(i).b<<std::endl;
}
std::cout<<"\nINDIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.PmyVector.at(i)->a<<" , b = "<<newClass.PmyVector.at(i)->b<<std::endl;
}
system("pause");
return 0;
}
Codice:
//Uscita DIRETTO a = 0 , b = 0 a = 1 , b = 1 a = 2 , b = 2 a = 3 , b = 3 a = 4 , b = 4 INDIRETTO a = 0 , b = 0 a = 0 , b = 0 a = 3562984 , b = 3563080 a = -1414812757 , b = -17891602 a = 4 , b = 4 |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Oct 2008
Messaggi: 12
|
Alla fine ho risolto usando gli indici come "puntatori" (tanto il vettore iniziale è fisso),
però il dubbio sul perché questo codice non funziona mi rimane |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
for(int i = 0; i<myVector.size(); i++) cout << &myVector[i] << endl; Quindi te salvi un indirizzo che poi non è più occupato dai dati che effettivamente stai cercando. |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Oct 2008
Messaggi: 12
|
Codice:
00365D38 00365E58 00365E60 00365EA8 00365EB0 00365EB8 00365D38 00365D40 00365D48 00365D50 003660D0 003660D8 003660E0 003660E8 003660F0 Grazie per avermi chiarito questo dubbio |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:42.




















