• 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)

Object Storage Arubacloud
0 głosów
1,716 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ź 171 wizyt
pytanie zadane 21 kwietnia 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
1 odpowiedź 920 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 1,792 wizyt
pytanie zadane 26 listopada 2020 w C i C++ przez mik53r Nowicjusz (150 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...