[C++] Funkcje

#include 

using namespace std;


void entliczek(int);

void stoliczek(int);


int main()

{

	int entliczek;

	int stoliczek;

	cout << e << endl;

	cout << e << endl;

	cout << s << endl;

	cout << s << endl;

	cin.sync();

	cin.get();

	return 0;

}

void entliczek(int e);

{

	e = "Entliczek pentliczek";

}

void stoliczek(int s);

{

	s = "Czerwony stoliczek";

}

Od razu mówię - program nie działa. Piszę to już n-ty raz i nic. Chodzi o to, że ma wyświetlić takie coś:

Entliczek pentliczek

Entliczek pentliczek

Czerwony stoliczek

Czerwony stoliczek

Mają w nim być 3 funkcje, w tym jedna main, która wywoła każdą z pozostałych dwukrotnie.

Robię wszystko jak było wyjaśnione w książce, czyli najpierw prototypy funkcji, potem w funkcji main przywołuję pozostałe funkcje, definiuje je i nic. Może diabeł tkwi w szczegółach. Nie za dobrze wiem kiedy używać int xxx(int);, in xxx(void);, czy void xxx(int);, itp. Tak samo z tymi wyrazami w nawiasach na końcu funkcji, że raz jest np. gitara(git), a innym razem gitara(int g).

Wiem jak przypisać do czegoś liczbę, np. pow = 10, ale jak to zrobić z wyrazami.

Trochę zawiłe jest pewnie to, co napisałem, ale nie mam wyjścia. Chcę się uczyć i muszę jakoś przez wszystko przebrnąć.

Tak to nie zadziała. Jest tu kilka “Grzechów głównych”:

  1. Do int’a próbujesz przypisać stringa.

  2. Parametr wejściowy jest widoczny tylko w ciele funkcji. Do zwracania wyników działania funkcji przez jej parametry można używać refencji, ale do tego jeszcze długa droga

  3. Nie wywołujesz nigdzie funkcji.

  4. W definicji funkcji nie używamy “;” po nazwie funkcji

A i polecam zainteresować się książką “Symfonia C++” Jerzego Grębosza.

Poprawnie byłoby

#include 

#include 

using namespace std;


string entliczek();

string stoliczek();


int main()

{

   cout << enticzek() << endl;

   cout << entliczek() << endl;

   cout << stoliczek() << endl;

   cout << stoliczek() << endl;

   cin.sync();

   cin.get();

   return 0;

}

string entliczek()

{

   return "Entliczek pentliczek";

}

string stoliczek()

{

  return "Czerwony stoliczek";

}

@up: wersję Standard, bo jeszcze będzie gotów zainstalować prehistorycznego Borlanda.

Swoją drogą to albo masz stary kompilator, albo borlanda: GCC ani VC nie przepuszczą takiego przypisania. Poza tym nadpisujesz nazwy funkcji nazwami zmiennych tracąc tym samym dostęp do nich.

Poczytaj o:

  • typach zmiennych (podstawa)

  • pamięć w c++

  • argumenty funkcji

  • wartość, wskaźnik, a referencja

Zrobiłbym to w ten sposób :

#include 

using namespace std;


void entliczek(void);

void stoliczek(void);


int main()

{

    int max = 2;

    for (int i = 0; i < max; i++)

        entliczek();

    for (int i = 0; i < max; i++)

        stoliczek();

    cin.sync();

    cin.get();

    return 0;

}


void entliczek(void)

{

   cout << "Entliczek pentliczek" << endl;

}


void stoliczek(void)

{

   cout << "Czerwony stoliczek" << endl;

}

void entliczek**(void)**

Właśnie o te pogrubione rzeczy mi chodzi. Muszę się douczyć, jak i kiedy ich używać.

Co do waszych propozycji - obie przeanalizuję głębiej, trudno, może to i źle, ale uczenie się z gotowców też ma swoje zalety. Dzięki wielkie :smiley:

void przed nazwą funkcji to typ funkcji. void gdy funkcja nie ma nic zwracać.

Drugie void w nawiasie oznacza że funkcja nie ma argumentów, stosowane kiedyś w C. W C++ dopuszczalne w starych kompilatorach. Brak tego void oznaczało że funkcja może mieć wiele argumentów nieznanych typów. W C++ używa się trzykropka.

Poprawne w C, ale nie w C++ (W C++ funkcja bez niczego w nawiasach jest bezargumentowa):

void foo(){

}


int main(){

  foo(2,3,4,5);

  return 0;

}

Poprawne w C++, niepoprawne w C (C nie rozpoznaje trzykropka):

void foo(...){

}


int main(){

  foo(2,3,4,5);

  return 0;

}

Niepoprawne ani w C, ani w C++ (błąd kompilacji: za dużo użytych argumentów w wywołaniu funkcji)

void foo(void){

}


int main(){

  foo(2,3,4,5);

  return 0;

}