C++ wskaźniki i referencje.

0

Ogólnie mam problem, mam zdefiniowaną funkcję, która przyjmuje obiekt referencję. A w mainie mam wskaźnik. Jak mogę wywołać taką funkcję prawidłowo z maina. Mówię tutaj o klasie?

Wiem istnieje google, ale jak znajduje, to tylko same pytania o wskaźniki albo o referencji.
Dziękowałbym za odpowiedź

0
Zapominalski napisał(a)

Ogólnie mam problem, mam zdefiniowaną funkcję, która przyjmuje obiekt referencję. A w mainie mam wskaźnik. Jak mogę wywołać taką funkcję prawidłowo z maina. Mówię tutaj o klasie?

Wiem istnieje google, ale jak znajduje, to tylko same pytania o wskaźniki albo o referencji.
Dziękowałbym za odpowiedź

Chodzi mi o klasę, bez znaku ?

0

Co to jest klasa bez znaku?

foo(*wsk);
0

Nie działa -.-
tzn. dobrze rozumiem
funkcja(foo(obiektKlasy))?

Ogólnie wywala mi coś takiego
C:\dane\aktywne\pilka\main.cpp||In function 'int main()':|
C:\dane\aktywne\pilka\main.cpp|69|error: invalid initialization of reference of type 'CKlasa&' from expression of type 'CKlasaBzowa*'|
C:\dane\aktywne\pilka\main.cpp|41|error: in passing argument 1 of 'void test(CKlasa&)'|
== Build finished: 2 errors, 0 warnings ===

A właśnie bład dotyczy takiego czegoś:

test(gracz1);

CklasaBazowa*gracz1 = new CKlasa("Jan", "Kowalski", "STH", 22);

0

Nie wiem czy w czymś pomogę ale jeśli chcesz się odwołać wskaźnikiem do funkcji składowej klasy musisz użyć ->

#include <cstdlib>
#include <iostream>

using namespace std;

class klasa {
public:
       int zmienna;  
       int funkcja(klasa & obiekt) {
            return obiekt.zmienna;  
       }
};


int main(int argc, char *argv[])
{
    
    klasa *obiekt_klasy1;
    klasa obiekt_klasy2;
    obiekt_klasy1->funkcja(obiekt_klasy2);
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

Nie, to nie to :/. Domyślam się, że problem jest z dziedziczeniem, bo tutaj mamy mateczkę po mateczce i wgl :/. Ok dzięki za chęci, jakby ktoś miał niech piszę, może jutro odczytam :)

0

Ciężko jest cokolwiek pomóc jeśli nie podałeś nawet kawałka kodu ;)

0

dokładnie tak jak napisał byku_guzio, nic nie przekształcaj:
funkcja(*wskaznik_na_obiekt_klasy);

0
#include <cstdlib>
#include <iostream>

using namespace std;



vodi funkcja(C& obiekt)
{
    ...
}

class A{
public:
       int zmienna;  
       int funkcja(klasa & obiekt) {
            return obiekt.zmienna;  
       }
};

class B : public A
{
     ....
}

class C : public B
{
    //tutaj na pewno jest ok.
}


int main(int argc, char *argv[])
{
    
   A *obiekt = new C();
   funkcja(*obiekt); //próbowałem już i innych kombinacji jak było źle
}

Schemat jest ok, czy nie?
Komunikat błedu jak mówiłem

C:\dane\aktywne\pilka\main.cpp||In function 'int main()':|
C:\dane\aktywne\pilka\main.cpp|69|error: invalid initialization of reference of type 'C&' from expression of type 'A'|
C:\dane\aktywne\pilka\main.cpp|41|error: in passing argument 1 of 'void funkcja(C&)'|
== Build finished: 2 errors, 0 warnings ===

Klasy działają poprawnie. Śmigam na nich bez problemu.

0

Funkcja oczekuje referencji do obiektu klasy C a Ty dajesz jej obiekt klasy A. Nie wyczuwasz w tym pewnego problemu?

0

Ale wtedy się sypie co innego :/. Ehm szkoda słów. Zacznę od podstaw i może się samo naprawi.

0

Jest dokładnie tak jak pisze Endrju. Żeby to zadziałało musisz zastosować jawne rzutowanie.

funkcja(*(dynamic_cast<C*>(obiekt)));
0

masz też literówkę:
vodi funkcja(C& obiekt)

0

Guzio jesteś pro!! Dzięki :)

Koniec topicu jak dla mnie :)

0

A gdyby tak zastosować szablon funkcji

template <class T>
void funkcja(T& obiekt)
{
   ...
}

a potem

   A *obiekt = new C();
   funkcja<A>(*obiekt); 

Ma to jakieś zastosowanie ?

0

Mam jeszcze jedno pytanie, mam taki problem, że mam funkcje zaprzyjaźnioną
CLASS A
{
void fun(B& obj1)
{
...
}
}

i druga klasę B w innych plikach
CLASS B
{
friend void fun(B& obj1)
{
...
}
}
I ciągle mi wyskakuje w klasie A, że klasa B nie jest zadeklarowana, nawet jak dołączam pakiet. O co chodzi?
tzn. w klasie A jest #include "B.h"

0

Pliki są w tym samym folderze i dołączone do projektu.
Może być problem, że obie klasy pochodzą od tej samej klasy abstrakcyjnej?

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