Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69

    [c++] problema con iteratori

    codice:
    		for (map< vector<string>, int>::iterator itObj = objectToNode.begin(); itObj != objectToNode.end(); itObj++)
    		{
    			vector<string> tmpVec;
    			tmpVec = itObj->first;
    //			for (vector<string>::iterator itWord = tmpVec.begin(); itWord != tmpVec.end(); itWord++)
    			for (vector<string>::iterator itWord = (itObj->first).begin(); itWord != (itObj->first).end(); itWord++)
    non capisco perchè in questo modo mi da errore, mentre se uso il codice commentato invece dell'altro for, funziona tutto... dove sbaglio?

    PS:
    map< vector<string>, int> objectToNode;


    l'errore comunque è il seguente:
    ../src/Ontology.cpp:82: error: conversion from ‘__gnu_cxx::__normal_iterator<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >’ to non-scalar type ‘__gnu_cxx::__normal_iterator<std::basic_string<ch ar, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >’ requested
    ../src/Ontology.cpp:96: warning: comparison between signed and unsigned integer expressions
    ../src/Ontology.cpp: In member function ‘void Ontology::matchingObject(std::vector<std::basic_st ring<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::map<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<double, std::allocator<double> >, std::less<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std:air<const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<double, std::allocator<double> > > > >&)’:

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A giudicare dall'errore, stai cercando di assegnare un const vector<string> a un vector<string>, da cui l'errore.
    Modifica in:
    codice:
    const vector<string> tmpVec = itObj->first; // etc.
    Anche se meglio sarebbe:
    codice:
    const vector<string>& tmpVec = itObj->first; // etc.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3

    Re: [c++] problema con iteratori

    prova così:
    codice:
    			for (vector<string>::const_iterator itWord = (itObj->first).begin(); itWord != (itObj->first).end(); itWord++)

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69
    Originariamente inviato da shodan
    A giudicare dall'errore, stai cercando di assegnare un const vector<string> a un vector<string>, da cui l'errore.
    Modifica in:
    codice:
    const vector<string> tmpVec = itObj->first; // etc.
    Anche se meglio sarebbe:
    codice:
    const vector<string>& tmpVec = itObj->first; // etc.
    mi sono spiegato maluccio

    allora, se uso il vettore temporaneo, e il for commentato al posto del for contiguo, funziona tutto correttamente.
    Il problema è che non volevo usare questo vettore temporaneo, infatti se invece faccio girare il codice postato sopra (il quale ignora il vettore temporaneo), mi da quell'errore.

    penso sia un problema del map, infatti ho ritrovato lo stesso problema qui:

    codice:
    	for (map< vector<string>, int>::iterator itM = objectList.begin(); itM != objectList.end(); itM++)
    	{
    		vector<string> tmpV;
    		tmpV = itM->first;
    		if (searchString(*itWords, tmpV))
    //		if ( searchString(description, (itM->first)) )
    		{
    			cout<<"ESISTE!!"<<endl;
    			currentObjExist = true;
    			break;
    		}
    	}
    così funziona, se invece cambio il commento e uso l'if inferiore non funziona come nel caso precedente

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69

    Re: Re: [c++] problema con iteratori

    Originariamente inviato da MacApp
    prova così:
    codice:
    			for (vector<string>::const_iterator itWord = (itObj->first).begin(); itWord != (itObj->first).end(); itWord++)
    grazie funziona!

    ho risolto anche l'altro problema modificando il parametro della funzione e mettendolo costante
    searchString(string stringToFind, const vector<string> &vectorToSearch)
    usando quindi al suo interno anche l'iteratore col prefisso const_

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da mogre
    mi sono spiegato maluccio
    No, ti eri spiegato bene. Sono io che avevo capito male perché ero di fretta.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.