Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] passare std::map ad una funzione

    Salve,

    dovrei creare una funzione che passa un arrayassociativo creato con std::map, questo è il codice che ho scritto finora:

    codice:
    #include <stdlib.h>
    #include <map>
    #include <math.h>
    
    int main()
    {
    	std::map<int, int> hashChunk;
    
    	int dwBuffer    = 100000;
    	int dwChunk     = 2304;
    	int dwNumChunks = (int)ceil((double)dwBuffer/dwChunk);
    	int dwLastChunk = dwChunk-((dwChunk*dwNumChunks)-dwBuffer);
    
    	int k = 0;
    	while (k < dwNumChunks - 1)
    	{
    		hashChunk.insert(std::make_pair(k, dwChunk));
    		++k;
    	}
    	hashChunk.insert(std::make_pair(k, dwLastChunk));
    
    	system("pause");
    	return 0;
    }
    
    BOOL stampa(const std::map<int, int>& hashChunk, int dwNumChunks)
    {
    	int g = 0;
    	while (g < dwNumChunks)
    	{
    		printf("%d -> %d\n", g, hashChunk[g]);
    		++g;
    	}
    	return true;
    }
    naturalmente ho un'errore durante la definizione di stampa(); vorrei passare la mappa come riferimento ma costante...

    grazie
    Alla batteria dai retta ballA

  2. #2

    Re: [C++] passare std::map ad una funzione

    nella funzione stampa, sostituisci:
    Originariamente inviato da gianvituzzi
    codice:
    	while (g < dwNumChunks)
    	{
    		printf("%d -> %d\n", g, hashChunk[g]);
    		++g;
    	}
    con
    codice:
    for (std::map<int, int>::const_iterator aIter = hashChunk.begin (); aIter != hashChunk.end (); ++aIter){
    	printf("%d -> %d\n", aIter->first, aIter->second);
    }

  3. #3
    perchè non scrivi:

    using namespace std;

    cosi ogni volta non devi scrivere std:: ?

  4. #4
    si ma continuo ad avere errore quì:

    codice:
    stampa(const std::map<int, int>& hashChunk, int dwNumChunks)
    Alla batteria dai retta ballA

  5. #5
    Originariamente inviato da gianvituzzi
    si ma continuo ad avere errore quì:

    codice:
    stampa(const std::map<int, int>& hashChunk, int dwNumChunks)
    "Posta" esattamente il codice che ti da errore, e se puoi anche l'errore, meglio anche se la versione del compilatore e del sistema operativo che stai usando:

    ad esempio con il seguente compila con zero errori zero warning (ho eliminato l'argomento non più utilizzato di stampa "int dwNumChunks")
    codice:
    /*
    	Compiled using:
    	$ g++ --version
    	i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493)
    	
    	Command:
    	$ g++ -Wall -ansi -pedantic -Wextra -Wconversion main.cpp
    	
    	Output:
    	$ ./a.out 
    0 -> 2304
    1 -> 2304
    2 -> 2304
    3 -> 2304
    
    {...omissis..}
    41 -> 2304
    42 -> 2304
    43 -> 928
    */
    
    #include <stdlib.h>
    #include <map>
    #include <math.h>
    
    static
    bool stampa(const std::map<int, int>& hashChunk);
    
    int main()
    {
    	std::map<int, int> hashChunk;
    
    	int dwBuffer    = 100000;
    	int dwChunk     = 2304;
    	int dwNumChunks = (int)ceil((double)dwBuffer/dwChunk);
    	int dwLastChunk = dwChunk-((dwChunk*dwNumChunks)-dwBuffer);
    
    	int k = 0;
    	while (k < dwNumChunks - 1)
    	{
    		hashChunk.insert(std::make_pair(k, dwChunk));
    		++k;
    	}
    	hashChunk.insert(std::make_pair(k, dwLastChunk));
    	
    	stampa (hashChunk);
    	// system("pause");
    	return 0;
    }
    
    static
    bool stampa(const std::map<int, int>& hashChunk)
    {
    	for (std::map<int, int>::const_iterator aIter = hashChunk.begin (); aIter != hashChunk.end (); ++aIter){
    		printf("%d -> %d\n", aIter->first, aIter->second);
    	}
    	return true;
    }

  6. #6
    VC++ EE su vista, mi da errore missing );
    Alla batteria dai retta ballA

  7. #7
    Originariamente inviato da gianvituzzi
    VC++ EE su vista, mi da errore missing );
    Senza l'esatto codice sorgente è davvero improbo diagnosticare il tuo problema.

  8. #8
    scusate ma proprio non capisco, c'è differenza nello scrivere BOOL e bool??

    ora questo funziona:

    codice:
    #include <stdlib.h>
    #include <map>
    #include <math.h>
    
    bool stampa(const std::map<int, int>& hashChunk);
    
    int main()
    {
    	std::map<int, int> hashChunk;
    
    	int dwBuffer    = 5880;
    	int dwChunk     = 2304;
    	int dwNumChunks = (int)ceil((double)dwBuffer/dwChunk);
    	int dwLastChunk = dwChunk-((dwChunk*dwNumChunks)-dwBuffer);
    
    	int k = 0;
    	while (k < dwNumChunks - 1)
    	{
    		hashChunk.insert(std::make_pair(k, dwChunk));
    		++k;
    	}
    	hashChunk.insert(std::make_pair(k, dwLastChunk));
    
    	system("pause");
    	return 0;
    }
    
    bool stampa(const std::map<int, int>& hashChunk)
    {
    	for (std::map<int, int>::const_iterator aIter = hashChunk.begin (); aIter != hashChunk.end (); ++aIter)
    	{
    		printf("%d -> %d\n", aIter->first, aIter->second);
    	}
    	return true;
    }
    Alla batteria dai retta ballA

  9. #9
    ancora una cosa, come passo l'argomento? questo mi da errore:

    bool result = stampa(&hashChunk);
    Alla batteria dai retta ballA

  10. #10
    ops, era: stampa(hashChunk);
    Alla batteria dai retta ballA

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 © 2024 vBulletin Solutions, Inc. All rights reserved.