Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błędy w programie "subscript requires array or pointer type", " cannot convert parameter 1 from 'std::string (__cdecl *)(void)' to 'std::string'" itd.

Ostatnio zmodyfikowano 2015-01-30 15:54
Autor Wiadomość
nano-stalker
Temat założony przez niniejszego użytkownika
Błędy w programie "subscript requires array or pointer type", " cannot convert parameter 1 from 'std::string (__cdecl *)(void)' to 'std::string'" itd.
» 2015-01-28 14:44:55
Witam. Otóż piszę program "kryptograficzny" na swój sposób ;). Nie potrafię rozwiązać kilku problemów (chyba że wcale źle go napisałem...) , oto log:

------ Build started: Project: Kryptograf v2.0, Configuration: Debug Win32 ------
  Kryptograf v2.0.cpp
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(159): error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'std::string [49]' to 'const std::basic_string<_Elem,_Traits,_Ax> &'
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>,
              _Ax=std::allocator<char>
          ]
          Reason: cannot convert from 'std::string [49]' to 'const std::basic_string<_Elem,_Traits,_Ax>'
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>,
              _Ax=std::allocator<char>
          ]
          No constructor could take the source type, or constructor overload resolution was ambiguous
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(175): error C2109: subscript requires array or pointer type
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(206): error C2664: 'porownaj' : cannot convert parameter 1 from 'std::string (__cdecl *)(void)' to 'std::string'
          No constructor could take the source type, or constructor overload resolution was ambiguous
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(277): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

A to część mojego programu w którym "są" te błędy:

C/C++
string tablicaZnakow()
{
    string tab[ 49 ];
    tab[ 0 ] = "pozycjazero";
    tab[ 1 ] = "a";
    tab[ 2 ] = "b";
    tab[ 3 ] = "c";
    tab[ 4 ] = "d";
    tab[ 5 ] = "e";
    tab[ 6 ] = "f";
    tab[ 7 ] = "g";
    tab[ 8 ] = "h";
    tab[ 9 ] = "i";
    tab[ 10 ] = "j";
    tab[ 11 ] = "k";
    tab[ 12 ] = "l";
    tab[ 13 ] = "m";
    tab[ 14 ] = "n";
    tab[ 15 ] = "o";
    tab[ 16 ] = "u";
    tab[ 17 ] = "p";
    tab[ 18 ] = "r";
    tab[ 19 ] = "s";
    tab[ 20 ] = "t";
    tab[ 21 ] = "w";
    tab[ 22 ] = "x";
    tab[ 23 ] = "y";
    tab[ 24 ] = "z";
    tab[ 25 ] = "A";
    tab[ 26 ] = "B";
    tab[ 27 ] = "C";
    tab[ 28 ] = "D";
    tab[ 29 ] = "E";
    tab[ 30 ] = "F";
    tab[ 31 ] = "G";
    tab[ 32 ] = "H";
    tab[ 33 ] = "I";
    tab[ 34 ] = "J";
    tab[ 35 ] = "K";
    tab[ 36 ] = "L";
    tab[ 37 ] = "M";
    tab[ 38 ] = "N";
    tab[ 39 ] = "O";
    tab[ 40 ] = "U";
    tab[ 41 ] = "P";
    tab[ 42 ] = "R";
    tab[ 43 ] = "S";
    tab[ 44 ] = "T";
    tab[ 45 ] = "W";
    tab[ 46 ] = "X";
    tab[ 47 ] = "Y";
    tab[ 48 ] = "Z";
    tab[ 49 ] = "1";
    return tab;
    //i tak dalej sie dorobi jak sie mechanike zrobi
}

int porownaj( string tab, string znak, int liczba )
{
    int a = 0;
    int kodZnaku;
    do
    {
        a++;
        if( znak.find( tab[ a ] != string::npos ) )
             kodZnaku = a;
        else
             kodZnaku = 0;
       
    } while( kodZnaku != 0 );
   
    return liczba[ kodZnaku ];
}

int krypt()
{
    int tablicaZnakowZapisanych[ 999 ];
    int tablicaLiczb[ 49 ];
    string znak, wiadomosc;
    int liczba;
    int i = 0;
    cout << "Tablica liczb:\n" << endl;
    do
    {
        cout << "|";
        liczba =( rand() % 49 ) + 0;
        if( liczba, tablicaLiczb, i == false )
        {
            tablicaLiczb[ i ] = liczba;
            i++;
        }
        cout << tablicaLiczb[ i ];
        cout << "|";
        cout << "\nWylosowano tablice." << endl;
    } while( i < 49 );
   
    cout << "Tresc wiadomosci: \n";
    getline( cin, wiadomosc );
    int dlugosc = wiadomosc.size();
    cout << "Dlugosc twojej wiadomosci: " << dlugosc << "/nKod zaszyfrowanej wiadomosci:\n" << endl;
    for( i; i < dlugosc; i++ )
    {
        znak.insert( 0, wiadomosc, i, i );
        tablicaZnakowZapisanych[ i ] = porownaj( tablicaZnakow, znak, liczba );
        cout << "|" << tablicaZnakowZapisanych[ i ] << "|";
    }
    return 0;
}
Proszę o pomoc, bo próbowałem rozwiązać to na różne sposoby...
P-125668
pekfos
» 2015-01-28 14:49:41
C/C++
string tablicaZnakow()
Zły typ.

C/C++
int porownaj( string tab, string znak, int liczba )
Jw.

C/C++
porownaj( tablicaZnakow, znak, liczba );
Na pewno wiesz, jak działają tablice i funkcje..?
P-125669
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-01-28 15:01:45
Tak mi się zdawało. To jak mam to poprawić? bo nic mi do głowy nie przychodzi
P-125670
Arteczek
» 2015-01-28 15:10:06
I dałeś do tablicy 50 elementów zamiast 49 ;)
P-125671
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-01-28 15:19:43
Racja dzięki :) Poprawiłem, teraz dlaczego jest tak?

------ Build started: Project: Kryptograf v2.0, Configuration: Debug Win32 ------
  Kryptograf v2.0.cpp
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(170): error C2107: illegal index, indirection not allowed
c:\documents and settings\xp\moje dokumenty\visual studio 2010\projects\kryptograf v2.0\kryptograf v2.0\kryptograf v2.0.cpp(277): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
A to jest gdzieś tutaj:
C/C++
int krypt()
{
    int tablicaZnakowZapisanych[ 999 ];
    int tablicaLiczb[ 50 ];
    string znak, wiadomosc;
    int liczba;
    int i = 0;
    cout << "Tablica liczb:\n" << endl;
    do
    {
        cout << "|";
        liczba =( rand() % 49 ) + 0;
        if( liczba, tablicaLiczb, i == false )
        {
            tablicaLiczb[ i ] = liczba;
            i++;
        }
        cout << tablicaLiczb[ i ];
        cout << "|";
        cout << "\nWylosowano tablice." << endl;
    } while( i < 49 );
   
    cout << "Tresc wiadomosci: \n";
    getline( cin, wiadomosc );
    int dlugosc = wiadomosc.size();
    cout << "Dlugosc twojej wiadomosci: " << dlugosc << "/nKod zaszyfrowanej wiadomosci:\n" << endl;
    for( i; i < dlugosc; i++ )
    {
        znak.insert( 0, wiadomosc, i, i );
        tablicaZnakowZapisanych[ i ] = porownaj( znak, liczba );
        cout << "|" << tablicaZnakowZapisanych[ i ] << "|";
    }
    return 0;
}
Z góry dzięki za pomoc.
P-125672
pekfos
» 2015-01-28 19:35:37
A to jest gdzieś tutaj:
Tak jakby masz w komunikacie błędu podany numer linii, więc 'gdzieś wśród tych 34 linii' to trochę mało konkretna informacja..
P-125686
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-01-30 15:54:06
Problem rozwiązał się sam. Dziekuje za pomoc. Zamykam temat.
P-125793
« 1 »
  Strona 1 z 1