Struktury w C++ różnią się od klas tylko jednym szczegółem - domyślnym specyfikatorem dostępu, który w strukturach jest domyślnie public, zaś w klasach - private.
przy deklaracji funkcji miałem inny typ. Ale nie wiem, dlaczego typem nie może być struktura (...)
Na początku miałem tę funkcję przedstawioną jako zwracającą typ struktury, czyli Piesek. Cały czas kompilator sypał błędem.
Może być struktura, jeśli tylko wcześniej została zadeklarowana. Jeśli pokażesz komunikat błędu, to znajdziemy przyczynę.
Zauważyłem, że przekazując strukturę do funkcji jako argument - operuję na kopii. Na rozwiązanie tego potrzebowałbym wskaźnika na strukturę?
Tak. Lub lepiej - referencję.
A przy tablicach, czy nie jest tak - ale nie chciałem rozbudowywać kodu, póki program się crashuje - że od razu jej pierwszy element jest wskaźnikiem i przekazując nazwę tablicy tak naprawdę do funkcji przekazuję wskaźnik do niej?
Dokładnie tak jest.
A teraz spójrz na to i odpowiedz mi na postawione tu pytania.
#include <iostream>
using namespace std;
//definicja struktury
struct Piesek{
string imie;
};
void view_Piesek(Piesek p){
p.imie = "Burek z funkcji";
cout << p.imie;
}
//definicja tablicy
string Psy[3];
/// Instrukcje nie mogą "wisieć" w przestrzeni globalnej - musisz je umieścić w ciele funkcji
//Psy[0] = "Burek"; //??? dlaczego tu się czepia?
int main()
{
/// co to poniżej i dlaczego to tu jest?
void view_Piesek(Piesek p); // się crashował, bo przy deklaracji miałem string jako typ
/// Przypominam, że nie zdefiniowałeś konstruktora i jest użyty domyślny.
Piesek pies1 = Piesek();
pies1.imie = "Burek";
view_Piesek(pies1);
}