Моя программа содержит класс, вот его упрощенная форма:Вызов функции объекта с помощью объекта указателей
Units.h:
#define fullwidth 200
#define fullheight 200
class Units
{
public:
[...]
void MovingUp(Units* Detector[fullwidth][fullheight], Units Self);
[...]
}
Он определяет функцию, которая принимает два аргумента в качестве входных данных: массив объекта указатели для объектов «Единицы» и специальный выбранный объект «Единицы».
Вот основная часть:
#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;
}
}
Он создает массив «единиц» объект указателей, которые необходимы для функции в «Единицы измерения» и устанавливает все эти значения NULL в самом начале.
После этого я пытаюсь вызвать функцию объекта через один случайно выбранный указатель. Очевидно, что если указатель ссылается на NULL, вызов невозможен, но Visual C++ показывает ошибку даже до запуска программы.
DetectorField[12][12]->MovingUp(DetectorField,DetectorField[12][12]);
Для этой версии, Visual C++ пишет после компиляции: не удается преобразовать параметр 2 из «единиц *» до «единиц» - конечно же, так как DetectorField
сам представляет собой массив указателей . Тогда я стараюсь ссылаться на объект он указывает, таким образом:
DetectorField[12][12]->MovingUp(DetectorField,&DetectorField[12][12]);
MSVC пишет после компиляции: не удается преобразовать параметр 2 из «единиц **» до «Units»
Существует не ясно мне, почему вторая версия ссылается на указатель указателя объекта, а не на объект. Кроме того, как я должен правильно написать вызов функции?
DetectorField [12] [12] - указатель. So & DetectorField [12] [12] является ссылкой на указатель. Чтобы получить объект, вы разыщите указатель, используя *. Попробуйте DetectorField [12] [12] -> MovingUp (DetectorField, * DetectorField [12] [12]); (Я просто отвечаю на этот вопрос, не обращая внимания на такие вопросы, как выделение памяти, почему бы не использовать интеллектуальные указатели, векторы и т. Д.). –
Я люблю любителя при использовании указателей. Для меня все в порядке, но указатели и много операций, связанных с управлением памятью, слишком много для моего мозга. Надеюсь, я смогу научиться. Благодаря! –
BTW - +1 за то, что я очень четко понимаю, чего вы не понимаете, и каков ваш вопрос. –