String jako argument funkcji o zmiennej liczności

Odpowiedz Nowy wątek
2014-12-18 19:25
0

Dobry wieczór, mam pewien problem - mam funkcję o zmiennej liczności (na razie chce zapisać stringi będące argumentami do pomocniczej tablicy w funkcji, której będę potem używał) i muszę przekazać do niej pewną ilość stringów. W takiej postaci program się nie kompiluje i wywala mi błąd - [Error] cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string<char>}' through '...' w miejscu wywołania funkcji. Jeśli zamienię "tablica[0]" na "tablica[0].c_str()" to program się kompiluje, ale i tak nie działa poprawnie. Ponadto w wywołaniu funkcji wątpię by było używane .c_str() ( wymóg zadania, nie moje widzimisie), więc muszę się bez tego obejść i tak. Więc jaki tu jest problem i jak mogę go rozwiązać??

string sum( int iloscLiczb, ... )
    {
        va_list ap;
        va_start ( ap, iloscLiczb );
        string tablica[iloscLiczb];
        for ( int i = 0; i < iloscLiczb; i++ )
            {
                char* s = va_arg( ap, char * );
                tablica[i] = s;
            }   
    }
 
int main()
    {
        int liczbaCyfr;
        cin >> liczbaCyfr;
        string tablica[liczbaCyfr];
        for ( int i = 0; i < liczbaCyfr; i++ )
            {
                cin >> * ( tablica + i ) ;
            }
        //cout << sum( liczbaCyfr, tablica );
        cout << sum ( liczbaCyfr, tablica[0], tablica[1]) ;
        return 0;
    }
edytowany 1x, ostatnio: Apprentice, 2014-12-18 19:26
Ten kod to jakiś mega WTF. - Endrju 2014-12-18 20:03

Pozostało 580 znaków

2014-12-18 20:05
1

Nie możesz tak zrobić. Nie możesz przekazać tablicy tylko obiekty po przecinku. Nie możesz przekazywać obiektów tylko prymitywy / wskaźniki.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-18 20:10
0

@kochambacę Pozdrawia :) @Shalom W sumie tablica jest tylko pomocnicza, wszystko rozchodzi się o stringi, o konkretne obiekty... Nie mogę przekazać do funkcji konkretnego elementu tablicy? Czy nva_arg nie może być elementem tablicy...? Co to są prymitywy to nie wiem, więc gdzie mogę przekazywać obiekty a gdzie tylko wskaźniki i prymitywy?

edytowany 1x, ostatnio: Apprentice, 2014-12-18 20:11

Pozostało 580 znaków

2014-12-18 20:16
0

Tablica nie jest tu problemem. Problemem jest typ obiektu. Nie możesz tam wrzucić obiektów klas. Tylko typy prymitywne.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-18 20:52
0

Ellipsis (czyli ...) działa tylko dla POD (plain old data) i pointerów. Pchanie do ellipsis czegokolwiek, co nie jest POD wcześniej (przed c++11) oznaczało undefined behaviour, teraz oznacza zależność od użytego kompilatora (jego implementacji). Jeśli zależy Ci na przesyłaniu do funkcji zmiennoargumentowej typów non-POD to użyj variadic template.
Co do zadania.... to nie rozumiem jakie jest polecenie. Może wyjaśnij co chcesz osiągnąć.

Pozostało 580 znaków

2014-12-18 21:19
0

Czemu nie możesz zrobić to po ludzku:

string sum(vector<string> &tb)
  {
   for(int i=0;i<tb.size();++i) cout<<tb[i]<<endl;
  }
 
int main()
  {
   size_t count;
   cin>>count;
   vector<string> tb(count);
   for(int i=0;i<tb.size();++i) cin>>tb[i];
   cout<<sum(tb);
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-18 21:30
0

Chodzi o to, by móc do funkcji wprowadzić odpowiednią ilość stringów, ciągów znaków, funkcja musi mieć nieokreśloną liczbę argumentów, dlatego Twoja propozycja Dragon odpada, bo to musi mieć jednego inta i potem tą nieokreśloną ilość argumentów...Ogólnie to funkcja ma sumować wielkie liczby z użyciem właśnie stringów, ale to nie jest tu problemem bo już metodę mam. Chodzi tylko o tą funkcję, ma ona właśnie tak wyglądać sum( int, ... ) . Więc jak mam to zrobić w takim razie, jak nie mogę tam stringów wsadzić bezpośrednio...? Ech.

Edit: tablice charów wejdą?

edytowany 1x, ostatnio: Apprentice, 2014-12-18 21:31

Pozostało 580 znaków

2014-12-18 21:56
0

Skąd ten mus?
Ta funkcja string sum(vector<string> &tb) może sobie zsumować te liczby.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
pewnie zadanko z idiotycznymi wymaganiami - karolinaa 2014-12-18 23:03
jak widać nie do końca, jedynie pytający wybrał najgorszy z zaproponowanych wariantów. - _13th_Dragon 2014-12-18 23:05

Pozostało 580 znaków

2014-12-18 22:15
0

Cóż, z treści zadania... Ech, nie mam biegłości w używaniu vectorów, nie wiem czy można ich w ogóle używać, ale spróbuje, dzięki za pomoc.

Pozostało 580 znaków

2014-12-18 22:22
0

Tej treści: http://4programmers.net/Forum/1093430


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-18 22:29
0

Heh, tej, widać, nie tylko ja z mojej uczelni jestem. W sumie wszystko co tutaj wstawiam to są zadania z tego. Jakieś przemyślenia co do tego?

Edit: co do tego zadania.

edytowany 1x, ostatnio: Apprentice, 2014-12-18 22:33
takie zadanka macie na 1 roku na UJ ? - karolinaa 2014-12-18 23:09
Owszem, po... 2,5 miesiąca bodajże. Pytanie, to źle, czy dobrze...? - Apprentice 2014-12-18 23:29

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0