rdrfear
(Rdrfear)
2 Styczeń 2012 18:34
#1
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ę.
nr47
(Sawyer47)
2 Styczeń 2012 18:43
#2
Nie ma zagnieżdżonych funkcji w C(++)
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.
Zapis double wierzcholki[ZMIENNA]; jest niepoprawny. Do dynamicznej alokacji służy malloc/calloc.
Johny
(Johny)
2 Styczeń 2012 20:37
#3
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
etam
(etam)
2 Styczeń 2012 21:06
#4
@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.
Johny
(Johny)
3 Styczeń 2012 11:46
#5
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ć
rdrfear
(Rdrfear)
5 Styczeń 2012 20:03
#6
Jak wylosować liczby typu double?
//EDIT:: dzięki za podpowiedzi.
nr47
(Sawyer47)
5 Styczeń 2012 20:22
#7
drobok
(Drobok)
5 Styczeń 2012 20:24
#8
(1.0 * rand() / koniec) * poczatek - 1.0
Albo coś w ten deseń
rdrfear
(Rdrfear)
6 Styczeń 2012 12:45
#9
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.
nr47
(Sawyer47)
6 Styczeń 2012 12:49
#10
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.
W C nie ma przeładowywania funkcji, w C++ jest.
rdrfear
(Rdrfear)
6 Styczeń 2012 13:12
#11
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.
nr47
(Sawyer47)
6 Styczeń 2012 14:02
#12
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++.
rdrfear
(Rdrfear)
6 Styczeń 2012 14:42
#13
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.