Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam stworzyłem program na obliczanie macierzy 2x2 przy użyciu programowania obiektowego - na zwykłych zmiennych i wszystko działa natomiast gdy próbuje przekształcić ów zwykłe zmienne na tablice wyskakuje mi błąd którego nie rozumiem.
bląd : podczasz wywoływania metody wypisujacej wynik : Request for member ‘oblicz’ in ‘jeden’, which is of non-class type 'macierz ( int (*)[2])’
Przedstawię uproszczony kod:
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; class Macierz { private: int tablica [2][2]; public: Macierz (int tablicaX[2][2]); double oblicz(); }; Macierz :: Macierz (int tablicaX[2][2]) { tablica[0][0] = tablicaX[0][0] ; tablica[0][1] = tablicaX[0][1] ; tablica[1][0] = tablicaX[1][0] ; tablica[1][1] = tablicaX[1][1] ; } double macierz::oblicz() { cout << "Wynik macierzy wynosi :"; cout << (tablica[0][0]*tablica[1][1]) - (tablica[0][1]*tablica[1][0]) << endl <<endl; } int main() { int tablicaX[2][2]; cout <<"Wzoroj sie na przykladzie : " <<endl <<endl; cout << "[X11 X12]"<<endl; cout << "[X21 X22]"<<endl; cout <<"Podaj wartosc X11" <<endl; cin >>tablicaX[0][0]; cout <<"podaj wartosc X12" <<endl; cin >>tablicaX[0][1]; cout <<"Podaj wartosc X21" <<endl; cin >>tablicaX[1][0]; cout <<"Podaj wartosc X22" <<endl; cin >>tablicaX[1][1]; Macierz jeden(tablicaX); jeden.oblicz(); return 0; }
Serdecznie dziękuje za ewentualną pomoc :)
Ostatnio edytowany przez lubiekoty1 (2012-02-09 21:11:13)
Offline
W funkcji main():
Linia ~56: macierz jeden(int tablicaX[2][2]); --> macierz jeden(tablicaX);
W wywołaniu konstruktora zadeklarowałeś nową tablicę, a raczej chcesz przekazać tą do której wczytujesz dane.
PS. Nazwy klas z reguły z dużej literki się nazywa macierz -> Macierz
PS 2. Przy tym pierwszym "#include<iostream>", brakuje spacji (patrz dwa poniżej tego) [coby konsekwencja była]
Offline
NIC napisał(-a):
W funkcji main():
Linia ~56: macierz jeden(int tablicaX[2][2]); --> macierz jeden(tablicaX);
W wywołaniu konstruktora zadeklarowałeś nową tablicę, a raczej chcesz przekazać tą do której wczytujesz dane.
PS. Nazwy klas z reguły z dużej literki się nazywa macierz -> Macierz
PS 2. Przy tym pierwszym "#include<iostream>", brakuje spacji (patrz dwa poniżej tego) [coby konsekwencja była]
Dziekuje serdecznie za pomoc -> głowiłem się nad tym od 2h.. :) Jeszcze raz dziękuje temat do zamknięcia
Ostatnio edytowany przez lubiekoty1 (2012-02-09 21:07:56)
Offline
Już obczaiłem. Kompilujesz gcc zamiast g++. U mnie twój kod przechodzi. :)
Fałszywy alarm... Dajcie mi chwile :D
Poza tym wywal biblioteki string i std... Piszesz obiektowo to po co ci *.h? To nawyk z C. W C++ wszystko odpowiednio powinno się pisać inaczej... cstring, cmath...
Ostatnio edytowany przez P@blo (2012-02-09 21:08:59)
Offline
P@blo napisał(-a):
Już obczaiłem. Kompilujesz gcc zamiast g++. U mnie twój kod przechodzi. :)
Poza tym wywal biblioteki string i std... Piszesz obiektowo to po co ci *.h? To nawyk z C. W C++ wszystko odpowiednio powinno się pisać inaczej... cstring, cmath...
Plik -> nowy projekt -> Automatycznie dodaje, nawet nie zwróciłem na to uwagi
Offline
Mam...
#include<iostream> using namespace std; class macierz { private: int tablica[2][2]; public: macierz(int tablicaX[2][2]); int oblicz(); }; int main(){ int tab[2][2]; cout <<"Wzoroj sie na przykladzie : " <<endl <<endl; cout << "[X11 X12]"<<endl; cout << "[X21 X22]"<<endl; cout <<"Podaj wartosc X11" <<endl; cin >>tab[0][0]; cout <<"podaj wartosc X12" <<endl; cin >>tab[0][1]; cout <<"Podaj wartosc X21" <<endl; cin >>tab[1][0]; cout <<"Podaj wartosc X22" <<endl; cin >>tab[1][1]; macierz jeden(tab); jeden.oblicz(); } macierz :: macierz (int tablicaX[2][2]){ tablica[0][0] = tablicaX[0][0] ; tablica[0][1] = tablicaX[0][1] ; tablica[1][0] = tablicaX[1][0] ; tablica[1][1] = tablicaX[1][1] ; }; int macierz::oblicz(){ cout << "Wynik macierzy wynosi :"; cout << (tablica[0][0]*tablica[1][1]) - (tablica[0][1]*tablica[1][0]) << endl <<endl; };
U mnie działa... Ale czym to się różni od twojego? A widze:
mac2.cc:30:20: error: ‘macierz’ has not been declared mac2.cc: In function ‘double oblicz()’: mac2.cc:33:28: error: ‘tablica’ was not declared in this scope
Ale musiałeś teraz pozmieniać bo reszta jest ok... :/ Polecam tablice dynamiczne.
Ostatnio edytowany przez P@blo (2012-02-09 21:33:26)
Offline
Strony: 1