[C/C++] Plik .h

Witam w nowym roku.

Piszę aktualnie (właściwie napisałem) swoje własne funkcje, które chcę zapisać w pliku .h.

Te funkcje mają mi liczyć metodą Monte Carlo pole danej funkcji.

Wszystko napisałem i teraz mam problem ze zrozumieniem/naprawieniem niektórych błędów, które wyrzuca kompilator.

Poprawiłem cały kod. Został tylko 1 problem, ale chyba sobie z nim poradzę.

  1. Nie ma zagnieżdżonych funkcji w C(++)

  2. Ostrzeżenia implicit declaration of function xxx i X undeclared występują tutaj pewnie przez brak dołączonych plików nagłówkowych:

stdlib.h dla rand, srand, stddef.h dla NULL, stdarg.h itd.

  1. Zapis double wierzcholki[ZMIENNA]; jest niepoprawny. Do dynamicznej alokacji służy malloc/calloc.

do swojej biblioteki trzeba podać pełną ścieżkę i nazwę zapisać w cudzysłowiu

#include “C:\sciezka\biblioteka.h”

i do tego te zagnieżdzenie w C++ pisze się nową klasę i tworzy obiekt

Class Functions()

{

funkcja1(); //prototypy

funkcja2();

funkcja3();

};

void funkcja1() {}; //deklaracje i definicje funkcji

void funkcja2() {};

void funkcja3()

{

// kod twojej funkcji

};

Pomyliłeś funkcje z klasami,ciała funkcji się NIE zagnieżdza i dlatego nie ma szans na prawidłową kompilację

W programie robisz tak w przypadku C++

Functions MojeFunkcje = new Functions(); //tworzymy obiekt MojeFunkcje() na podstawie klasy Functions()

MojeFunkcje:funkcja1(); //Wywołanie metody objektu

Jako wskazniki

Functions *MojeFunkcje = new Functions();

MojeFunkcje->funkcja1(); //Wywołanie metody objektu

@rdrfear

Polecam http://cplusplus.com/doc/tutorial/ ale tak od deski do deski. Szczególnie rozdziały o klasach i wskaźnikach na funkcje.

@Johny

Jest to prawda, ale nie ostateczna. Polecam lekturę http://cplusplus.com/doc/tutorial/preprocessor/ akapit “Source file inclusion”

W jakim to języku? Bo do c++ to zupełnie nie podobne. Lektura do poduszki: http://cplusplus.com/doc/tutorial/classes/

Poza tym w c++ to co nazwałeś prototypami to są deklaracje, a to co deklaracjami i definicjami to są definicje.

new zawsze zwraca wskaźnik (dlatego tylko druga propozycja jest poprawna). A wywołanie metody statycznej jest przez podwójny dwukropek.

Podałem przykład na dwa sposoby wywołań,zgadzam się jest to trochę pseudokod ale mniej więcej pokazuje jak to zrobić,ma naprowadzić pytającego czego na Google albo w książkach o c/c++ szukać

Jak wylosować liczby typu double?

//EDIT:: dzięki za podpowiedzi.

Rozwiązanie możesz znaleźć tutaj: http://stackoverflow.com/questions/2704 … mbers-in-c

Tutaj też inne proponowane rozwiązania: http://stackoverflow.com/questions/1340 … d-1-from-c

(1.0 * rand() / koniec) * poczatek - 1.0

Albo coś w ten deseń :slight_smile:

Poprawiłem program tylko została mi jeszcze jedna rzecz.

Mianowicie wszystkie funkcje napisane w tymże pliku mają nazywać się tak samo - czytałem, że to jest bezproblemowe dla kompilatora, lecz mam z tym kłopoty, bo dostaję cały czas błędy, że już taka funkcja była wcześniej zadeklarowana itd. Oczywiście moje funkcje przyjmują różne dane, więc myślałem, że to nie problem.

//EDIT: poprawione używając kompilatora c++. Zmiana z malloc’ow na new.

W C nie ma przeładowywania funkcji, w C++ jest.

Czy to oznacza, że w pliku .h nie można tak przeładowywać funkcji?

Kiedy próbuję do mojego pliku dodać biblioteki typu kompilator krzyczy, że nie ma takiego pliku ani miejsca.

W pliku MC.h nie moga sie znalezc definicje i deklaracje funkcji o nazwie innej niz MC.

Można, jeśli to C++. Nie można, jeśli to C.

Kompilujesz źródła kompilatorem C czy C++?

Jeśli chcesz użyć przeciążania funkcji to wyboru nie ma, trzeba użyć C++.

Dzięki za podpowiedzi, kod zmieniłem pod względem malloc na new i faktycznie przeładowywanie teraz działa. Poprawiłem sobie też generator liczb losowych. Używałem kompilatora c, dlatego miałem te błędy. Dzięki za pomoc jeszcze raz.