[C++] Problem z klasami i odwołaniami do nich
Ostatnio zmodyfikowano 2012-03-28 20:16
pentional Temat założony przez niniejszego użytkownika |
[C++] Problem z klasami i odwołaniami do nich » 2012-03-26 19:20:00 Witam, Poniżej mam parę błędów. Siedzę jużtroche nad tym i ciągle jakiś 'czeski błąd' popełniam. Rzućcie okiem. #include <cstdlib> #include <iostream> #include <cmath>
using namespace std;
class punkt { public: float x, y, punkty; punkt() { x = 0; y = 0; punkty++; } punkt( float cx, float cy ) { x = cx; y = cy; punkty++; } ~punkt() { punkty--; } void wyswWspol() { cout << "Lokalizacja:\nx --> " << x << " y --> " << y << "\n"; } bool sprawdz( punkt a, punkt b ) { if( a.x == b.x && a.y == b.y ) return 1; else return 0; } }
class odcinek { public: odcinek() { punkt pierwszy; punkt drugi; pierwszy->x = 0; pierwszy->y = 0; drugi->x = 0; drugi->y = 0; } odcinek( punkt pierwszy, punkt drugi ) { pierwszy->x = pierwszy; pierwszy->y = pierwszy; drugi->x = drugi; drugi->y = drugi; } ~odcinek(); void wyswWspol() { cout << "Lokalizacja:\n pierwszy: x --> " << pierwszy->x << " y --> " << pierwszy->y; cout << "Lokalizacja:\n drugiy: x --> " << drugi->x << " y --> " << drugi->y; } float obDluOdc() { return sqrt(( pierwszy->y - pierwszy->x ) *( pierwszy->y - pierwszy->x ) + ( drugi->y - drugi->x ) *( drugi->y - drugi->x ) ); } }
int main() { punkt * punktA = new punkt; punkt * punktB = new punkt( 33, 55 ); punkt * punktC = new punkt( 100.9, 75.2 ); cout << "Punkt z konstruktora domyslnego\n"; punktA->wyswWspol(); cout << "Punkty z konstruktora z parametrami\n"; punktB->wyswWspol(); punktC->wyswWspol(); punkt * tabPkt = punkt[ 3 ]; cout << "Tablica obiektów punktów\n"; tabPkt[ 0 ].x = 1; tabPkt[ 0 ].y = 3; tabPkt[ 0 ].wyswWspol(); tabPkt[ 1 ].x = 10; tabPkt[ 1 ].x = 20; tabPkt[ 1 ].wyswWspol(); tabPkt[ 2 ].x = 15.99; tabPkt[ 2 ].x = 100.01; tabPkt[ 2 ].wyswWspol(); odcinek * odcinekA = new odcinek; count << "Odcinek z konstruktora domyslnego\n"; ocinekA->wyswWspol(); cout << "Wspolrzedne odcinka\n"; odcinekA->pierwszy->x = 44; odcinekA->pierwszy->y = 22; odcinekA->drugi->x = 1; odcinekA->drugi->y = 99; odcinekA->wyswWspol(); cout << "odcinek dymaniczny\n"; punkt * punktD = new punkt( 2, 5 ); punkt * punktE = new punkt( 3, 6 ); odcinek * odcinekB = new odcinek( punktD, punktE ); odcinekB->wyswWspol(); float dlugosc = odcinekB->obDluOdc(); cout << "Dlugosc odcinka to: " << dlugosc << " \n"; punktA( 45, 67 ), punktB( 65, 98 ); bool z = sprawdz( punktA, punktB ); if( x == 1 ) cout << "Punkty sa takie same\n"; else cout << "Punktyu sa rozne\n"; cout << " Jest punktow: " << punkty; delete punktA; delete punktB; delete punktC; delete odcinekA; delete odcinekB; delete[] tabPkt; system( "PAUSE" ); return EXIT_SUCCESS; } |
|
Chlorek |
» 2012-03-27 23:39:31 Zapomniałeś o średniku po klamrze: class costam { };
#Edit Na przyszłość ludzie - błagam, podawajcie treść błędu, wtedy jest dużo łatwiej. |
|
pentional Temat założony przez niniejszego użytkownika |
» 2012-03-28 19:21:17 Poprawiłem. Niestety są dalej problemy: main.cpp: In constructor `odcinek::odcinek()': main.cpp:54: error: base operand of `->' has non-pointer type `punkt' main.cpp:55: error: base operand of `->' has non-pointer type `punkt' main.cpp:56: error: base operand of `->' has non-pointer type `punkt' main.cpp:57: error: base operand of `->' has non-pointer type `punkt'
main.cpp: In constructor `odcinek::odcinek(punkt, punkt)': main.cpp:62: error: base operand of `->' has non-pointer type `punkt' main.cpp:63: error: base operand of `->' has non-pointer type `punkt' main.cpp:64: error: base operand of `->' has non-pointer type `punkt' main.cpp:65: error: base operand of `->' has non-pointer type `punkt' main.cpp: In member function `void odcinek::wyswWspol()': main.cpp:73: error: `pierwszy' undeclared (first use this function) main.cpp:73: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:74: error: `drugi' undeclared (first use this function)
main.cpp: In member function `float odcinek::obDluOdc()':
main.cpp:79: error: `pierwszy' undeclared (first use this function) main.cpp:80: error: `drugi' undeclared (first use this function) main.cpp: In function `int main()': main.cpp:99: error: expected primary-expression before '[' token main.cpp:113: error: invalid operands of types `<unknown type>' and `const char[35]' to binary `operator<<' main.cpp:114: error: `ocinekA' undeclared (first use this function) main.cpp:116: error: 'class odcinek' has no member named 'pierwszy' main.cpp:117: error: 'class odcinek' has no member named 'pierwszy' main.cpp:118: error: 'class odcinek' has no member named 'drugi' main.cpp:119: error: 'class odcinek' has no member named 'drugi'
main.cpp:125: error: no matching function for call to `odcinek::odcinek(punkt*&, punkt*&)' main.cpp:48: note: candidates are: odcinek::odcinek(const odcinek&) main.cpp:61: note: odcinek::odcinek(punkt, punkt) main.cpp:51: note: odcinek::odcinek() main.cpp:131: error: `punktA' cannot be used as a function
main.cpp:131: error: `punktB' cannot be used as a function main.cpp:132: error: `sprawdz' undeclared (first use this function) main.cpp:133: error: `x' undeclared (first use this function) main.cpp:138: error: `punkty' undeclared (first use this function) |
|
Chlorek |
» 2012-03-28 20:16:08 No i czego nie rozumiesz? W błędach masz jasno napisane - gdzie, co i jak. Naucz się rozwiązywać problemy sam. Wrzucasz log kompilacji z 20 błędami i oczekujesz, że każdy teraz Ci wypiszę z łopatologicznym tłumaczeniem i tym jak poprawić. Dla przykładu: "main.cpp:74: error: `drugi' undeclared (first use this function)" Czego nie rozumiesz w tym przykładowym błędzie? O ile nie jesteś nowy w programowaniu (a nie jesteś skoro już takie rzeczy potrafisz napisać) to powinieneś bez większego problemu to poprawić. Tak poza tym chcę jeszcze zwrócić uwagę, że Twój kod w ogóle się za bardzo "kupy nie trzyma". Co najmniej masakryczne, w ogóle nie masz pojęcia o klasach, zacznij od kursu C++, potem pisz programy. |
|
« 1 » |