ricardoneves93 Posted September 22, 2013 at 09:00 PM Report #525505 Posted September 22, 2013 at 09:00 PM (edited) 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 September 22, 2013 at 09:01 PM by ricardoneves93 http://www.speedtest.net/result/2682095343.png
HappyHippyHippo Posted September 22, 2013 at 11:53 PM Report #525509 Posted September 22, 2013 at 11:53 PM é 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 Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now