string/stringstream per parameter übergeben



  • hallo,

    ich habe schon diesen http://www.c-plusplus.net/forum/viewtopic-var-t-is-227896.html thread gefunden, und dachte, das wär die lösung. leider nicht bei mir...

    mein problem:

    //datei.h
    class foo
    {
      private:
        int i;
      public:
        void bar(std::stringstream s);
    };
    
    //datei.cpp
    void bar::var(str::stringstream s)
    {
      size_t len = s.str().size();
    }
    
    //woanders...
    foo obj;
    std::stringstream stream;
    stream << "test";
    obj.bar(test);
    

    Fehlermeldung:

    error C2248: "std::basic_ios<_Elem,_Traits>::basic_ios": Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios<_Elem,_Traits>-Klasse erfolgte.
    with
    [
      Elem=char,
      _Traits=std::char_traits<char>
    ]
    d:\programme\microsoft visual studio 8\vc\include\ios(151): Siehe Deklaration von 'std::basic_ios<_Elem,_Traits>::basic_ios'
    with
    [
      _Elem=char,
      _Traits=std::char_traits<char>
    ]
    Diese Diagnose trat in der vom Compiler generierten Funktion "std::basic_stringstream<_Elem,_Traits,_Alloc>::basic_stringstream(const std::basic_stringstream<_Elem,_Traits,_Alloc> &)" auf.
    with
    [
      _Elem=char,
      _Traits=std::char_traits<char>,
      _Alloc=std::allocator<char>
    ]
    

    ich habe jetzt schon mehrfach gelesen, dass stringstream keinen kopierkonstruktor hat, weswegen man es nicht per wert, sondern nur per referenz übergeben kann. also so:

    //datei.h
    class foo
    {
      private:
        int i;
      public:
        void bar(std::stringstream &s);
    };
    
    //datei.cpp
    void bar::var(str::stringstream &s)
    {
      size_t len = s.str().size();
    }
    

    doch wenn ich das mache, ändert sich nichts an der fehlerausgabe.

    ich nutze visual studio 2005 unter xp. danke jetzt schon fürs runterscrollen 🙂



  • problem gelöst.. ich habe eine funktion übersehen, die einen stringstream als wert zurückgegeben hat (zurückgeben sollte/wollte)... was ja auch nicht geht. und die war halt schuld. ich finde es nur irgendwie doof, dass man halt alle stellen im code nach stringstream abklappern muss und ein doppelklick auf die fehlermeldung mir nicht den "bösen" strinstream anzeigt..
    na dann frohes schaffen noch 🙂


Anmelden zum Antworten