metodo que retorna string** ¿porque no compila?

rodri
20 de Junio del 2004
A ver quien me puede ayudar, me da el siguiente error en compilacion:
68 C:Dev-Cppcppmain.cpp cannot convert `std::string (*)[2]' to `
El codigo es:
#include <iostream>
#include <string>

using namespace std;

class ClassArray
{
private:
string str;
string Astr[2];
string AAstr[2][2];

public:
ClassArray();
string get_str ();
string* get_Astr ();
std::string** get_AAstr ();
};

int main(int argc, char *argv[])
{
ClassArray MiArray;
cout<<MiArray.get_str()<<endl;
cout<<MiArray.get_Astr()[0]<<endl;
cout<<MiArray.get_Astr()[1]<<endl;
cout<<MiArray.get_AAstr()[0][0]<<endl;
cout<<MiArray.get_AAstr()[1][0]<<endl;
cout<<MiArray.get_AAstr()[1][0]<<endl;
cout<<MiArray.get_AAstr()[1][1]<<endl;
system("PAUSE");
return 0;
}

/********************/
ClassArray::ClassArray ()
{
cout<<"Creando Objeto"<<endl;
str="str";
Astr[0]="Astr0";
Astr[1]="Astr1";
AAstr[0][0]="AAstr00";
AAstr[0][1]="AAstr01";
AAstr[1][0]="AAstr10";
AAstr[1][1]="AAstr11";
}
/********************/
string ClassArray::get_str () //sin problemas
{
return str;
}

/******************/
string* ClassArray::get_Astr () //sim problemas
{
return Astr;
}

/********************/
std::string** ClassArray::get_AAstr ()
// aqui tengo elERROR
{
return AAstr;
}
/**********************/








neo20
20 de Junio del 2004
Hola rodri,
desgraciadamente , implementar doble puntero en c++ tiene esas cosas , lo ke he hecho es declaralo como doble puntero y no con [][] y reservando memoria . Weno alla te pego el codigo:

#include <iostream>
#include <string>

using namespace std;

class ClassArray
{
private:
string str;
string Astr[2];
string **AAstr;

void reserva_memoria()
{
AAstr=new string*[2];
for(int i=0;i<2;i++)
*(AAstr+i)=new string[20];
}

public:
ClassArray();
string get_str ();
string* get_Astr ();
string** get_AAstr ();
};

int main(int argc, char *argv[])
{
ClassArray MiArray;
cout<<MiArray.get_str()<<endl;
cout<<MiArray.get_Astr()[0]<<endl;
cout<<MiArray.get_Astr()[1]<<endl;
cout<<MiArray.get_AAstr()[0][0]<<endl;
cout<<MiArray.get_AAstr()[1][0]<<endl;
cout<<MiArray.get_AAstr()[1][0]<<endl;
cout<<MiArray.get_AAstr()[1][1]<<endl;
system("PAUSE");
return 0;
}

/********************/
ClassArray::ClassArray ()
{
cout<<"Creando Objeto"<<endl;
str="str";
Astr[0]="Astr0";
Astr[1]="Astr1";
reserva_memoria();
AAstr[0][0]="AAstr00";
AAstr[0][1]="AAstr01";
AAstr[1][0]="AAstr10";
AAstr[1][1]="AAstr01";
}
/********************/
string ClassArray::get_str () //sin problemas
{
return str;
}

/******************/
string* ClassArray::get_Astr () //sim problemas
{
return Astr;
}

/********************/
string** ClassArray::get_AAstr ()
// aqui ya no hay ERROR
{
return AAstr;
}
/**********************/

Espero que te sirva de ayuda. Si no , ya diras algo.
Suerte

rodri
20 de Junio del 2004
Perfecto neo20, ya habia intentado esa solucion pero no hacia la reserva de memoria correctamente.
De todas formas sigo teniendo la duda de porque no funcionaba mi solucion, en teoria es correcto ¿no?.
Defino un array de dos dimensiones y paso un puntero a punteros ¿no?

Muchas gracias