Mój program zawiera klasę, oto jego uproszczona forma:Wywołanie funkcji obiektu poprzez wskaźniki obiektów
Units.h:
#define fullwidth 200
#define fullheight 200
class Units
{
public:
[...]
void MovingUp(Units* Detector[fullwidth][fullheight], Units Self);
[...]
}
To definiuje funkcję, która pobiera dwa argumenty jako wejście: tablica obiektu wskaźniki dla obiektów "Jednostki" i specjalny wybrany obiekt "Jednostki".
Oto główne części:
#include "Units.h"
[...]
int i,j;
Units* DetectorField[fullwidth][fullheight];
Units Examples[20];
for (j=0;j<fullheight;j++)
{
for (i=0;i<fullwidth;i++)
{
DetectorField[i][j] = NULL;
}
}
Tworzy tablicę „jednostki” wskaźniki obiektu, który jest niezbędny do funkcjonowania w „jednostkach” i ustawia wszystkie te wartości NULL na samym początku.
Po tym, próbuję wywołać funkcję obiektu przez jeden losowo wybrany wskaźnik. Oczywiście, jeśli wskaźnik jest odwoływany do wartości NULL, wywołanie jest niemożliwe, ale program Visual C++ pokazuje błąd nawet przed uruchomieniem programu.
DetectorField[12][12]->MovingUp(DetectorField,DetectorField[12][12]);
Dla tej wersji Visual C++ pisze po kompilacji: nie można konwertować parametru 2 z „Jednostki *” do „Jednostki” - oczywiście, ponieważ sama DetectorField
jest tablicą wskaźników. Wtedy staram się odwołać do obiektu to punkty, w ten sposób:
DetectorField[12][12]->MovingUp(DetectorField,&DetectorField[12][12]);
MSVC pisze po kompilacji: nie można konwertować parametru 2 z „Jednostek **” do „Jednostki”
Nie jest jasne dla mnie, dlaczego druga wersja odwołuje się do wskaźnika wskaźnika obiektu, a nie do obiektu. Ponadto, w jaki sposób powinienem napisać wywołanie funkcji we właściwy sposób?
DetectorField [12] [12] jest wskaźnikiem. So & DetectorField [12] [12] jest odniesieniem do wskaźnika. Aby uzyskać obiekt, odłóż wskaźnik za pomocą *. Wypróbuj DetectorField [12] [12] -> MovingUp (DetectorField, * DetectorField [12] [12]); (Po prostu odpowiadam na to pytanie i nie zwracam uwagi na pytania takie, jak pamięć została przydzielona, dlaczego nie używać inteligentnych wskaźników, wektorów itp.) –
Jestem trochę amatorka w używaniu wskaźników. Podstawowe rzeczy są dla mnie w porządku, ale wskaźniki i wiele operacji związanych z obsługą pamięci to trochę za dużo dla mojego mózgu. Mam nadzieję, że mogę się uczyć. Dzięki! –
BTW - +1 za bardzo jasne, czego nie rozumiesz i jakie jest twoje pytanie. –