konstruktor nie inicjuje zmiennych
Ostatnio zmodyfikowano 2021-12-11 11:19
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-08 20:50:10 |
|
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-08 20:50:10 |
|
pekfos |
» 2021-12-08 22:21:19 Czy musze przerzucić tablice obiektów na stertę? Jeśli tak, czy mógłbyś napisać jak to zrobić, bo nie mogę znaleźć informacji na ten temat? Najlepiej nie trzymać na stosie dużych tablic, bo możesz spowodować crash aplikacji. Jak sam napisałeś, możesz użyć new, ale ręczne zarządzanie pamięcią bez powodu jest złym rozwiązaniem. Zamiast tego użyj std::vector<>. std::vector < LiniaProsta > punkty( 800 );
LiniaProsta * punkty = new LiniaProsta[ 800 ]; delete[ ] punkty; https://en.cppreference.com/w/cpp/container/vectornie mogę znaleźć informacji na ten temat A szukałeś po angielsku? Jeśli masz komunikaty kompilatora po polsku, to najlepiej jakbyś je rozumiał, bo inaczej równie dobrze możesz je mieć po chińsku (pewnie nawet więcej wyników będzie w Google). W przypadku Visuala masz opcję szukać numer komunikatu, dla "C6262" jest dobry opis w https://docs.microsoft.com/en-us/cpp/code-quality/c6262?view=msvc-170. |
|
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-09 00:30:17 Oto moja próba użycia wektora obiektów. Wrzucam do Allegro 5, żeby rysowało mi wykresy niestety nie działa. Brak błędów składni, ale nie wiem jak zadeklarować funkcje Line i przesłać do niej argumenty, wywołać obiekt punkt i przesłać argumenty do konstruktora. struct LiniaProsta { }; struct PunktWspolny { PunktWspolny( std::vector < LiniaProsta > punkty, std::vector < LiniaProsta > punkty2 ) { } }; void Line( std::vector < LiniaProsta > punkty, int a, int b ) { } int main( void ) { std::vector < LiniaProsta > punkty( 800 ); std::vector < LiniaProsta > punkty2( 800 ); Line( punkty, a, b ); Line( punkty2, c, d ); PunktWspolny punkt( punkty, punkty2 ); }
|
|
pekfos |
» 2021-12-09 18:18:45 Nie działa, bo nie ma co działać. Gdzie reszta kodu? Jakbyś skopiował z poprzedniej wersji to też by się skompilowało. Teraz jak zmieniłeś tablicę na jedną wartość (reprezentującą tablicę), to przekazywanie argumentu w ten sposób powoduje skopiowanie tej wartości, a więc i całej tablicy. W Line() modyfikowałeś wartość tablicy, więc żeby teraz ta zmiana była widoczna poza funkcją, musisz przekazać wektor przez referencję. Przekazywanie argumentów funkcji przez referencjęNawet jak nie modyfikujesz wektora, i tak powinieneś go przekazywać przez referencję, najlepiej przez referencję na stałą, żeby oszczędzić na niepotrzebnym kopiowaniu danych. Więc PunktWspolny( const std::vector < LiniaProsta > & punkty, const std::vector < LiniaProsta > & punkty2 ) void Line( std::vector < LiniaProsta > & punkty, int a, int b ) |
|
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-11 11:19:37 Ok. Wszystko działa. Dzięki za pomoc. |
|
1 « 2 » |