Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

konstruktor nie inicjuje zmiennych

Ostatnio zmodyfikowano 2021-12-11 11:19
Autor Wiadomość
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179129
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179130
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<>.
C/C++
std::vector < LiniaProsta > punkty( 800 );

// lub jeśli koniecznie chcesz

LiniaProsta * punkty = new LiniaProsta[ 800 ];
//..
delete[ ] punkty;
https://en.cppreference.com/w/cpp/container/vector

nie 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.
P-179131
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.
C/C++
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 );
}
P-179132
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ę.
» Kurs C++» Poziom 3Przekazywanie argumentów funkcji przez referencję lekcja
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
C/C++
PunktWspolny( const std::vector < LiniaProsta > & punkty, const std::vector < LiniaProsta > & punkty2 )
void Line( std::vector < LiniaProsta > & punkty, int a, int b )
P-179133
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-11 11:19:37
Ok. Wszystko działa. Dzięki za pomoc.
P-179135
1 « 2 »
Poprzednia strona Strona 2 z 2