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
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.
C/C++
#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ę.  
P-179121
pekfos
» 2021-12-08 19:24:55
C/C++
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.
P-179122
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?
P-179123
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179124
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179125
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179126
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179127
lewus
Temat założony przez niniejszego użytkownika
» 2021-12-08 20:50:10
P-179128
« 1 » 2
  Strona 1 z 2 Następna strona