konstruktor nie inicjuje zmiennych
Ostatnio zmodyfikowano 2021-12-11 11:19
lewus Temat założony przez niniejszego użytkownika |
konstruktor nie inicjuje zmiennych » 2021-12-08 18:21:42 Pisze program do znajdywania punktu wspólnego dwóch funkcji liniowych. Program znajduje punkt wspólny, ale konstruktor nie przełącza składowej live na true. Ponadto Visual Studio wyświetla mi ostrzeżenia o przeniesieniu danych na stertę. Wiem, że trzeba użyć operatora new i wskaźnika, ale nie wiem jak to zrobić jeśli program jest obiektowy. #include <iostream> struct LiniaProsta { int ID; int x; int y; int live; }; struct PunktWspolny { int x, y; bool live; PunktWspolny( LiniaProsta punkty[ ], LiniaProsta punkty2[ ] ) { for( int i = 0; i < 800; i++ ) for( int j = 0; j < 800; j++ ) if( punkty[ i ].x == punkty2[ j ].x && punkty[ i ].y == punkty2[ j ].y ) { live = true; x = punkty2[ j ].x; y = punkty2[ j ].y; std::cout << "PW"; } else live = false; } }; int a = 1, b = 0; int c = 2, d = 0; int itx = 0, ity = 0; void Line( LiniaProsta punkty[ ], int a, int b ) { for( int i = 0; i < 400; i++ ) { punkty[ i ].x = i + 200; punkty[ i ].y = - 1 * a * i + 200 + b; } for( int i = 400; i < 800; i++ ) { itx--; ity--; punkty[ i ].x = itx + 200; punkty[ i ].y = - 1 * a * ity + 200 + b; } } int main( void ) { LiniaProsta punkty[ 800 ]; LiniaProsta punkty2[ 800 ]; Line( punkty, a, b ); Line( punkty2, c, d ); PunktWspolny punkt( punkty, punkty2 ); if( punkt.live ) std::cout << punkt.x; }
Ostrzeżenie C26495 Zmienna „PunktWspolny::x” jest niezainicjowana. Zawsze inicjuj zmienną składową (type.6). Ostrzeżenie C26495 Zmienna „PunktWspolny::y” jest niezainicjowana. Zawsze inicjuj zmienną składową (type.6). Ostrzeżenie C6262 Liczba bajtów stosu używana przez funkcję („25612”) przekracza wartość /analyze:stacksize „16384”. Rozważ przeniesienie części danych na stertę.
|
|
pekfos |
» 2021-12-08 19:24:55 for( int i = 0; i < 800; i++ ) for( int j = 0; j < 800; j++ ) if( punkty[ i ].x == punkty2[ j ].x && punkty[ i ].y == punkty2[ j ].y )
{ live = true; x = punkty2[ j ].x; y = punkty2[ j ].y; std::cout << "PW"; } else live = false; Każdy obieg pętli ustawia wartość live, więc liczy się tylko wynik ostatniego testu. Pewnie powinieneś przerwać przetwarzanie w przypadku spełnienia warunku. Jeśli jednak to miało być wyczerpujące przeszukanie tych tablic, to ustaw live na false przed pętlami. Powinieneś też zainicjalizować x i y na wypadek gdyby nie zdarzyło się to w pętli, choćby po to by uciszyć kompilator. Wiem, że trzeba użyć operatora new i wskaźnika, ale nie wiem jak to zrobić jeśli program jest obiektowy. Obiektowość nie robi tu żadnej różnicy. |
|
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-08 20:50:10 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? |
|
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 |
|
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 |
|
lewus Temat założony przez niniejszego użytkownika |
» 2021-12-08 20:50:10 |
|
« 1 » 2 |