• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazywanie referencyjne tablicy znaków (string)

0 głosów
2,470 wizyt
pytanie zadane 12 listopada 2015 w C i C++ przez Przemysław Obywatel (1,510 p.)
edycja 12 listopada 2015 przez Przemysław

Witam. Probelm, który opiszę napotkałem w języku Pawn. Jako, że jest on prawie identyczny jak C++, napisałem podbny kod w tym języku i okazało się, że w nim problem także występuje.

Otóż (nie wiem czy dobrze to nazywam) chciałbym aby funkcja za pomocą referencji zwróciła mi dwie wartości, np.:

 

#include <iostream>
#include <string.h>

using namespace std;

void funkcja(int l1, int l2, int &suma, int &roznica)
{
	suma = l1+l2;
	roznica = l1-l2;
}

int main()
{
	system("cls");

	int sumka, rozni;
	
	funkcja(3, 4, sumka, rozni);
	
	cout<<"suma " <<sumka<<" roznica: " <<rozni;
	system("PAUSE>NULL");
	return 0;
	
}

 

Do tej pory, wszystko działa poprawnie. Jednak jeśli chcę dodać jeszcze jedną zmienną, która do której zostani wpisany string, pojawia się już problem.

#include <iostream>
#include <string.h>

using namespace std;

void funkcja(int l1, int l2, int &suma, int &roznica, string &jakistekst[30])
{
	suma = l1+l2;
	roznica = l1-l2;
	jakistekst = "raz,dwa,trzy";
}

int main()
{
	system("cls");

	int sumka, rozni;
	string tekst[30];
	
	funkcja(3, 4, sumka, rozni, tekst);
	
	cout<<"suma " <<sumka<<" roznica: " <<rozni<< " tekst: " << tekst;
	system("PAUSE>NULL");
	return 0;
	
}
Błędy:
7 C:\Dev-Cpp\Examples\Hello\Hello.cpp declaration of `jakistekst' as array of references 
 C:\Dev-Cpp\Examples\Hello\Hello.cpp In function `void funkcja(int, int, int&, int&)': 
10 C:\Dev-Cpp\Examples\Hello\Hello.cpp `jakistekst' undeclared (first use this function) 
  (Each undeclared identifier is reported only once for each function it appears in.) 
 C:\Dev-Cpp\Examples\Hello\Hello.cpp In function `int main()': 
7 C:\Dev-Cpp\Examples\Hello\Hello.cpp too many arguments to function `void funkcja(int, int, int&, int&)' 
20 C:\Dev-Cpp\Examples\Hello\Hello.cpp at this point in file 

Dodam jeszcze, że w języku Pawn, treść błędu to: 


variable cannot be both a reference and an array (variable "dalszaczesc") 

2 odpowiedzi

+1 głos
odpowiedź 12 listopada 2015 przez sofnir Gaduła (4,690 p.)
wybrane 18 listopada 2015 przez Przemysław
 
Najlepsza

Hej, spróbuj w ten sposób: 

#include <iostream>
#include <string.h>
#include <windows.h>

using namespace std;

void funkcja(int l1, int l2, int &suma, int &roznica, string &jakistekst)
{
    suma = l1+l2;
    roznica = l1-l2;
    jakistekst = "raz,dwa,trzy";
}

int main()
{
    system("cls");

    int sumka, rozni;
    string tekst;

    funkcja(3, 4, sumka, rozni, tekst);

    cout<<"suma " <<sumka<<" roznica: " <<rozni<< " tekst: " << tekst;
    system("PAUSE>NULL");
    return 0;

}

Dlaczego jak definiujesz stringa to tworzysz go jak tablice?

 

komentarz 12 listopada 2015 przez Przemysław Obywatel (1,510 p.)

Rzeczywiście, działa :) Mój problem jednak nie został rozwiązany.
 

Dlaczego jak definiujesz stringa to tworzysz go jak tablice?

 Ano trochę się zagapiłem. To z przyzwyczajenia, gdyż w Pawn, nie ma chyba stringów, a są jedynie tablice char'ów. To dlatego chcę, aby referencja była ustawiona na tablicę, bo otrzymuję błąd: variable cannot be both a reference and an array (variable "jakistekst") 

komentarz 12 listopada 2015 przez sofnir Gaduła (4,690 p.)
edycja 12 listopada 2015 przez sofnir
Nie wiem jak to jest w tym Pawnie, ale w c++ przekazywanie tablicy działa trochę inaczej, polecam ci się zapoznać z tym: http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Przekazywanie-tablic-jednowymiarowych-do-funkcji/324 Sprawdź sobie jak działa ten kod: http://4programmers.net/Pastebin/4492 Nie ma tam referencji, a i tak dostaje się do oryginału tablicy.
komentarz 12 listopada 2015 przez Przemysław Obywatel (1,510 p.)
Wielkie dziękI! Działa też w Pawn! :)
Nawet nie wiesz jak mi pomogłeś ;) Jeszcze raz wielkie dzięki ;)
0 głosów
odpowiedź 12 listopada 2015 przez Macek Kolo Mądrala (5,480 p.)
Funkcja void nic nie zwraca, powinięte byc typ z &. Nie da się też zwrócić 2 obiektów,  opakuj je w klase/strukturę.
komentarz 12 listopada 2015 przez Przemysław Obywatel (1,510 p.)
Wiem, że nic nie zwraca, dlatego nie ma w niej słowa 'return'.
Chodzi mi o to, że w pierwszym przykładzie działa dobrze, kiedy ma (powiedziałbym zwrócić, ale to złe słowo) wpisać do dwóch intów dwie wartości, a kiedy próbuję dodać do tego trzecią zmienną w postaci ciągu znaków, to już się wysypuje
komentarz 12 listopada 2015 przez Macek Kolo Mądrala (5,480 p.)
no wiesz, to już nie moja wina, że używasz złych słów.

Podobne pytania

0 głosów
1 odpowiedź 325 wizyt
pytanie zadane 21 kwietnia 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
0 odpowiedzi 349 wizyt
0 głosów
1 odpowiedź 1,414 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...