ambiguous overload for ‘operator>>’



  • Moin,
    folgendes Problem: Ich möchte einen oeprator >> definieren für meine Klasse figure:

    Fehlermeldung:
    |8|error: ambiguous overload for ‘operator>>’ in ‘std::cin >> polyline’|

    // deklaration
    class figure{
        public:
            figure();
            void addPoint(point p);
            void insertAt(point p, int pos);
    
            // soll die Punkte direkt aus dem CIN-Stream einlesen
            friend std::istream & operator>> ( std::istream & stream,  figure& F);
    
        private:
            std::list<point> fig;
            std::list<point>::iterator it;
    } ;
    // definition von operator >>
    std::istream& operator>> ( std::istream & stream,  figure& F){
        std::string input;
        stream>>input;
        std::cout<<input;
        return stream;
    }
    

    Jetzt meckert der Compiler (GCC) aber ständig rum, wenn ich versuche das simple

    figure polyline s;
    cin>> s;
    

    zu machen... Warum ?? Ich verstehe die Fehlermeldung nnicht wirklich. Ich hab doch extra nichts im Std-namespace rumgewurschtelt.



  • Hast du <string> eingebunden?



  • Hi,
    ja, hab ich...

    Aber das Thema hat sich erledigt. ich mache es jetzt ein wenig anders. Der Ansatz war dumm.

    Ich hänge gerade bei einem anderen Problem, vielleicht kann ich das noch kurz in den Thread packen, ist nur eine Verständnisfrage:

    Ich will nen vallarray als member in einer klasse haben. Wie muss ich diese Klasse initialisieren ? Also wie muss so ein Constructor aussehen? Ich muss ja irgendwie die Größe des Valarrays irgenwann mal übergeben - wo?



  • Hast du mal etwas von der Initialisierungsliste gehört?
    Dort kannst du die Member Initialisieren. Also auch dein valarray.



  • In der Referenz zu std::valarray siehst du die unterstützen Konstruktoren. Einer davon hat folgende Signatur:

    explicit valarray (size_t n);
    

    Die Grösse kannst du also gleich in der Konstruktor-Initialisierungsliste deiner Klasse mitgeben. Je nach Bedarf verleihst du dem Konstruktor MyClass::MyClass() noch Parameter, die du dann weiterreichst.

    class MyClass
    {
        public:
            MyClass();
    
        private:
            std::valarray<double> MyValues;
    };
    
    MyClass::MyClass()
    : MyValues(42) // <- das ist die Initialisierungsliste
    {
    }
    


  • ach ja, danke - genau so ging das...


Anmelden zum Antworten