Jump to content
Sign in to follow this  
ricardoneves93

convert char pointer to double.

Recommended Posts

ricardoneves93

Estou a tentar fazer uma função que a partir de um char* do tipo [0.6 0.5 0.6 0.4], me consiga converter cada valor individualmente para um vector<double>. O problema é que me está a dar erro a retornar o vector. Talvez por nao estar a devolver um apontador.

vector<double> YASFScene::*splitString(const char* s)
{
string buf;
stringstream ss(s);
double x;
vector<double> values;
while(ss >> buf)
{
 x = atof(buf.c_str());
 values.push_back(x);
}
return values;
}

o erro é o seguinte:

Error: no suitable conversion function from "std::vector<double,std::allocator<double>>" to "std::vector<double,std::allocator<double>> YASFScene*" exists

Header file:

#ifndef _XMLSCENE_H_
#define _XMLSCENE_H_
#include "tinyxml.h"
#include <vector>
class YASFScene
{
public:
YASFScene(char *filename);
~YASFScene();
static TiXmlElement *findChildByAttribute(TiXmlElement *parent,const char * attr, const char *val);
vector<double> *splitString(const char s);

protected:
TiXmlDocument* doc;
TiXmlElement* globalsElement;
TiXmlElement* camerasElement;
TiXmlElement* lightingElement;
TiXmlElement* leavesElement;
TiXmlElement* appearancesElement;
TiXmlElement* texturesElement;
TiXmlElement* graphElement;
TiXmlElement* perspectiveElement;
TiXmlElement* orthoElement;
TiXmlElement* texture;
TiXmlElement* node;
TiXmlElement* transforms;
TiXmlElement* translate;
TiXmlElement* rotate;
TiXmlElement* scale;
TiXmlElement* appearanceref;
TiXmlElement* noderef;
TiXmlElement* children;
TiXmlElement* rectangle;
TiXmlElement* triangle;
TiXmlElement* cylinder;
TiXmlElement* sphere;
TiXmlElement* torus;

};
#endif

Penso que o problema é este: eu na header file tenho a função declarada com * antes. O que quer dizer que tenho que devolver um apontador. Mas eu nao pretendo devolver um apontador, porém se retirar o asterisco a função no .cpp dá-me erro.

Obrigados pela ajuda!

Edited by ricardoneves93

Share this post


Link to post
Share on other sites
HappyHippyHippo

é obvio que se o protótipo etá definido de uma maneira, não deverás implementar de outra ...

o que pretendes deverá ser isto (visto que não percebo exactamente a tua definição do "char *")

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

// ...

   std::stringstream ss("0.6 0.5 0.6 0.4");
   std::vector<double> values;

   do
   {
       double buf;

       ss >> buf;             // o operador >> retorna a referência para o stream, logo nunca poderá ser usado como validação de operação
                              // a razão do tipo de valor de retorno é devido à possibilidade de encadeamento de chamadas como
                              // exemplo : ss >> val1 >> val2 >> val3;

       values.push_back(buf);
   } while(ss.rdstate() & std::ifstream::goodbit); // é necessário validar se a leitura foi correctamente efectuada, isto é,
                                                   // se o "internal state" do stream não foi lterado para nenhum valor de erro
                                                   // eofbit, failbit ou badbit

   // output
   std::vector<double>::iterator iter = values.begin();
   while (iter != values.end()) {
       std::cout << "double = " << *iter << std::endl;

       iter++;
   }

// ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.