Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

arqeverton

Passar objeto por referencia

Recommended Posts

Ola Pessoal

Sou programador pascal, estou migrando pro c++.

tenho uma classe com um atributo privado fstream ( para ler e escrever um txt ) conforme corpo abaixo:

class TRoot {
    private:
	std::fstream mainStream;
	/*Check File Open*/
    protected:
        void set_Stream(std::fstream &aStream);
	/*Get the stream*/
	std::fstream get_Stream(void);
    public:
	void loadFromStream(std::fstream &aStream);
};

a partir do meu main(); eu atribuo o fstream dessa maneira:

int main()
{
    fstream aFile("teste.txt", ios_base::in | ios_base::app);
    TRoot arck;
    arck.loadFromStream(aFile);
    return 0;
}

no meu public da classe eu o recebo assim e esta tudo ok:

/* Load from Stream */
void TArckRoot::loadFromStream(std::fstream &aStream) {
  if (aStream.is_open()){
    cout << "Ok" << endl;
  }
  set_Stream(aStream);
}

então eu o envio para o set_Stream, para recebe*lo la no meu mainStream que é privado, dessa maneira:

/* Put the Stream*/
void TArckRoot::set_Stream(std::fstream &aStream) {
   mainStream = aStream;
}

porém da um erro de operador na classe io_base....

voces sabem me dizer se essa é a maneira correta de atribuir um objeto em c/c++?

pois em pascal eu usava essa logica.

agradeço

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, o ios possui uma função chamada copyfmt (std::ios::copyfmt), a qual permite você copiar todos os membros internos de classe para outra.

Eu nunca utilizei esta função em um fstream, portanto não sei se funciona 100% (acredito que sim).

void set_Stream(std::fstream &aStream)
{
    mainStream.copyfmt(aStream);
}

Teste e veja se funciona e responde aqui :)

Caso não dê certo vou procurar outra forma de fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.