Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::map in mehreren funktionen nutzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.08.2005, 10:44 Uhr
Skippy



ich hab mal ne frage ich habe ein map in der ich beim starten des programmes werte einlese

cgi.h

C++:
// Map von Language Strings
typedef std::map<std::string,std::string> cgi_all_ext;



cgi.cpp

C++:
void readinextensions()
{
cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi
.
.
.
.
      cgi_ext.insert(std::map<std::string,std::string>::value_type(CgiExtension, ExeToExecute));



so ich muss jetzt noch ne funktion schreiben die prüfen kann ob eine dateiextension in diesem map steht ich bekomme es leider nicht hin das beide funktionen auf ein map zugreifen können

daher wa muss ich tun das das map

C++:
cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi

überall verfügbar ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2005, 11:05 Uhr
(un)wissender
Niveauwart


Äh, was willst du?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2005, 13:09 Uhr
Skippy



ich möchte in einer funktion (void readinextensions())
das map mit daten füllen bei mir erfolgt das in der art

php=cphp\php-cgi.exe

und in ner anderen funktion(std::string giveexecute)

möcht ich auf die map zugreifen um
z.b. den wert von php auslesen


cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi

ich bekomm das aber nicht hin das die map in beiden gültig ist
ich bekomme entweder die fehlermeldung das
der member cgi_ext nicht deklariert ist oder wenn ich
cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi
in den header packe kommt multiple definition von cgi_all_ext
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2005, 15:26 Uhr
(un)wissender
Niveauwart


Ah, Parameterübergabe also. Hie rmal ein Bsp. das du aber noch für dich anpassen musst.


C++:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <map>

// Map von Language Strings
typedef std::map<std::string,std::string> cgi_all_ext;

//Vector für die gefundenen php-extensions.
typedef std::vector<std::string> cgi_php_ext;

void readinextensions(cgi_all_ext &map);
const cgi_php_ext giveexecute(const cgi_all_ext &map);

int main()
{
    cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi
    readinextensions(cgi_ext);
    cgi_php_ext cgi_vec = giveexecute(cgi_ext);  
    std::cout << "Found php-extensions:\n";
    std::copy(cgi_vec.begin(), cgi_vec.end(),
        std::ostream_iterator<std::string>(std::cout, "\n"));
}

void readinextensions(cgi_all_ext &map)
{
    typedef std::pair<std::string, std::string> my_pair;
    map.insert(my_pair("0", "php=c:\\php-cgi.exe"));
    map.insert(my_pair("1", "php=c:\\php-cgi1.exee"));
    map.insert(my_pair("2", "c++=c:\\c++-cgi.exe"));
    map.insert(my_pair("3", "c++=c:\\c++-cgi1.exe"));
}

const cgi_php_ext giveexecute(const cgi_all_ext &map)
{
    cgi_php_ext vec;
    const std::string EXT = "php=";
    typedef std::map<std::string,std::string>::const_iterator map_iter;
    for(map_iter i = map.begin(); i != map.end(); ++i)
    {
        std::string value = i->second;
        std::string::size_type index;
        if((index = value.find(EXT)) != std::string::npos && index + 1 + EXT.length() < value.length())
        {
            vec.push_back(value.substr(index + EXT.length(), value.length()));
        }    
    }  
    
    return  vec;  
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.08.2005, 16:24 Uhr
Skippy



danke nochmal und musste nichts anpassen ausser das ich ohne vector und paur auskomme to mich halt leider noch sehr schwer mit zeogern und call by referenz

aber eine frage hab ich noch warum nutz ihr immer alle dieses pair man kommt doch meißt auch ohne aus dennoch jedes beispiel zu diesem thema nutzt immer pair

das muss ja irgendnen grund haben ihr macht euch das doch nicht ohne grund schwerer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.08.2005, 17:15 Uhr
(un)wissender
Niveauwart


, nee, tun wir nicht.
Map nutzt nun mal std::pair. Es ist halt ein Tupel aus Schlüssel und Wert. Wenn der Schlüssel gleichzeitig der Wert sein soll, nimm std::set.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.08.2005, 17:50 Uhr
Skippy



eine frage hab ich noch ich habs eigentlich hinbekommen bis auf eine
vielleicht kann mir da noch jemand helfen


in der main.cpp


C++:
void Get(webserver::http_request* r) {
.
.
.
  else if (isCGIextension()) {                     //hier soll das map übergeben werden
    printf ("\n\nCGI is php to exECUTE,");

    r->fileiscgi_  = "TRUE";
  }



int main (int argc, char *argv[])
{
.
.
.
    cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi
    readinextensions(cgi_ext);

  webserver(SERVERPORT, Get);




und in der weserver.h


C++:
class webserver {
  public:
    struct http_request { ......}

    typedef   void (*request_func) (http_request*);
    webserver(unsigned int port_to_listen, request_func);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.08.2005, 17:54 Uhr
(un)wissender
Niveauwart


Wo liegt das Problem? Wie man Parameter übergibt, weißt du doch jetzt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2005, 18:21 Uhr
Skippy



das klappt hier aber nicht

wenn ich in webserver(SERVERPORT, Get);das einsetze
webserver(SERVERPORT, Get(cgi_ext));

dann meint er illegale konvertierung von cgi_ext nach webserver::http_request*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.08.2005, 19:44 Uhr
(un)wissender
Niveauwart


Jo. ist ja auch kein Wunder. Ist auch eine map und kein http_request.
Ich finde es recht schwer zu wissen, was du wirklich willst. Poste mal mehr Code und sag mal genau, was am Ende rauskommen soll.


Bearbeitung:

Ich vermute aber mal, dass das hier eh nichts wird. Lerne erstmal (z.b. anhand eines Buches) C++. Einen Schritt nach dem anderen.


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 21.08.2005 um 19:47 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: