no matching function



  • Warum geht das nicht?

    #include <string>
    #include <vector>
    
    namespace cr
    {
        struct detailsCrypt
        {
            std::vector<unsigned short> rnd_numbers_key;
            std::vector<unsigned short> rnd_numbers_2byte;
            std::vector<unsigned short> rnd_numbers_4byte;
        };
    
        class Crypt
        {
            public:
    
            std::string create_key() const;
            unsigned short transform_key(const std::string &key) const;
            unsigned short transform_key(const std::string &key, const std::vector<unsigned short> &random_numbers) const;
            unsigned short downsize_key(unsigned short raw_key) const;
    
            private:
            detailsCrypt cd_data;
        };
    }
    

    Crypt.cpp

    #include <string>
    #include <vector>
    #include "crypt.hpp"
    #include "random.hpp"
    using namespace std;
    using namespace rd;
    
    namespace cr
    {
        string Crypt::create_key() const
        {
            string key;
            for(int i=0;i<6;++i)
            {
                char temp=randomize.rnd(97,122);
                key +=temp;
            }
            return key;
        }
    
        unsigned short Crypt::transform_key(const string &key) const
        {
            unsigned short amount=0;
            for(int i=0;i<6;++i)
            {
                cd_data.rnd_numbers_key.push_back(randomize.rnd(123,1000)); //<-- ???
                amount +=cd_data.rnd_numbers_key.back() - key[i];
            }
            return amount;
        }
    
        unsigned short Crypt::transform_key(const string &key, const vector<unsigned short> &random_numbers) const
        {
            unsigned short amount=0;
            for(int i=0;i<6;++i)
            {
                amount +=random_numbers[i] - key[i];
            }
            return amount;
        }
    
        unsigned short Crypt::downsize_key(unsigned short raw_key) const
        {
            if(raw_key < 12)
            {
                raw_key +=12;
            }
    
            if((raw_key % 12) == 0)
            {
                raw_key /=12;
            }
            else
            {
                raw_key = ((raw_key - (raw_key % 12)) / 12);
            }
    
            return raw_key;
        }
    }
    

    Ich schaus schon nä viertel Stunde an, check aber nicht warums nicht funzt.

    ERROR:
    Compiling: crypt.cpp
    crypt.cpp: In member function short unsigned int cr::Crypt::transform_key(const std::string&) const': crypt.cpp:27: error: no matching function for call tostd::vector<short unsigned int, std::allocator<short unsigned int> >::push_back(short int) const'
    H:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/bits/stl_vector.h:557: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = short unsigned int, _Alloc = std::allocator<short unsigned int>] <near match>
    Process terminated with status 1 (0 minutes, 0 seconds)

    MfG
    Stromberg



  • Die Fehlermeldung ist merkwürdig, aber auf jeden Fall versuchst du in der const-Funktion "transform_key", eine Member-Variable (bzw deren Inhalt) zu verändern.



  • Aus const-ElemFkt. kannst du nur weitere const-ElemFkt. aufrufen. push_back ist aber nicht const und das sagt dir deine Fehlermeldung auch ...


Anmelden zum Antworten