Funkcja zaprzyjaźniona z argumentami dwóch klas

0

Witam wszystkich.
Mam problem z umieszczeniem argumentów dwóch klas w funkcji zaprzyjaźnionej.Zrobiłem to tak:

#ifndef _WEKT_H
#define	_WEKT_H
#include "Macierz.h"
KLASA WEKT
class Wekt
                   {

                   friend void Iloczyn (Macierz, Wekt);
                   ..............
                    }

KLASA MACIERZ

#ifndef _MACIERZ_H
#define	_MACIERZ_H
#include "Wekt.h"

class Macierz {

                   friend void Iloczyn (Macierz, Wekt);
................
}

FUNKCJA ILOCZYN

#include <iostream.h>
#include"Wekt.h"
#include"Macierz.h"

 void Iloczyn (Macierz tab[][], Wekt a)
{
..................}

Jak taki kod usiłuje skąpilować wyskakuje mi błąd, troche nie rozumiem bo importuje przecież drugą klase

Wekt.h:10: error: `Macierz' has not been declared

0

Bo tak się nie da. Zapoznaj się z deklaracjami zapowiadającymi.

0

Dodałem w każdej klasie class NazwaKlasyZapowiadanej; i działa :).
Ale wyskoczył mi następny błąd i nie wiem czy to jest z tym związane :(

#include <iostream.h>
#include"Macierz.h"
#include"Wekt.h"

 void Iloczyn (Macierz tab[3][3], Wekt a)
{
     double tabWynikow [3];

     tabWynikow[0] = (a.wspX * tab[1][1]) + (a.wspY * tab[2][1]) + (a.wspZ * tab[3][1]);
     tabWynikow[1] = (a.wspX * tab[1][2]) + (a.wspY * tab[2][2]) + (a.wspZ * tab[3][2]);
     tabWynikow[2] = (a.wspX * tab[1][3]) + (a.wspY * tab[2][3]) + (a.wspZ * tab[3][3]);

     cout <<"Wynik mnożenia macierzy przez wektor: " << "\n" ;
     for(int i=0; i<3 ;i++){          
         cout << tabWynikow[i] << "\n";
         }

 }

Błąd jest taki:

In file included from main.cpp:4:

Iloczyn.h:9: error: no match for 'operator*' in 'a.Wekt::wspX * *(((Macierz*)tab) + 288u)'

Iloczyn.h:9: error: no match for 'operator*' in 'a.Wekt::wspY * *(((Macierz*)tab) + 504u)'

Iloczyn.h:9: error: no match for 'operator*' in 'a.Wekt::wspZ * *(((Macierz*)tab) + 720u)'

Iloczyn.h:10: error: no match for 'operator*' in 'a.Wekt::wspX * *(((Macierz*)tab) + 360u)'

Iloczyn.h:10: error: no match for 'operator*' in 'a.Wekt::wspY * *(((Macierz*)tab) + 576u)'

Iloczyn.h:10: error: no match for 'operator*' in 'a.Wekt::wspZ * *(((Macierz*)tab) + 792u)'

Iloczyn.h:11: error: no match for 'operator*' in 'a.Wekt::wspX * *(((Macierz*)tab) + 432u)'

Iloczyn.h:11: error: no match for 'operator*' in 'a.Wekt::wspY * *(((Macierz*)tab) + 648u)'

Iloczyn.h:11: error: no match for 'operator*' in 'a.Wekt::wspZ * *(((Macierz*)tab) + 864u)'

In file included from main.cpp:4:

Obiektam klasy Macierz jest tablica [3][3], a klasy Wekt obiekt mający pola: wspX, wspY, wspZ

0

Macierz tab[3][3], Wekt a

a.wspX * tab[1][1] => pole wspX z 'a' * komorka[1][1] z 'tab' => wartosc long/double * obiekt Macierz => blad 'nieznany operator * pomiedzy lewa long/double a prawa strona wyrazenia bedaca "Macierz" '

kompilator nie wie, jak moze pomnozyc Twoj obiekt Macierz razy np. 6ipół

najprawdopodobniej albo skopales wyrazenie Macierz tab[3][3] i chodzilo Ci o cos innego, albo tez skopałeś właściwa linijke mnożącą i powinno tam być więcej indeksow. jesli na 100% wiesz co robisz i tak ma byc -- potrzebujesz przeciazyc operator mnożenia dla klasy Macierz ktory bedzie faktycznie wiedzial jak takie obiekty mnozyc przez liczby

1 użytkowników online, w tym zalogowanych: 0, gości: 1