Что перейти к этой функции? - PullRequest
0 голосов
/ 27 августа 2010

У меня есть следующая проблема:

//A.h

class A
{
  //...
  // this is the important part, i have to call this in the proper way
  // in A::SetNewValue(), but i don't know how to do that
  protected:
    void SetValue(const int* i);
  //...

  public:
    // ??
    void SetNewValue(const int* p);
}

cpp:

//A.cpp
//??
A::SetNewValue(const int* p)
{
  // ??
  this->SetValue(&p);    
}

и ...

//...
// and later in another file...
//...
A a = new A();

int a_value = 4;
int* p;
p=&value;

// ??
a->SetNewValue(p);

Объясненная проблема: класс A - это встроенный класс в платформе.У меня нет способа изменить защищенный A :: SetValue () на public, и я не могу добраться до него извне.Поэтому я решил написать другую функцию A :: SetNewValue () для вызова A :: SetValue, но я не знаю, как передавать указатели и ссылки в параметрах функции.У меня всегда есть такие ошибки: не могу конвертировать из * в &, const * в * и т. Д. ...

Как мне сделать это правильно?Это вообще возможно?

Большое спасибо за ваши усилия и за вашу помощь.

Редактировать: Код выше - пример. Я пробовал передавать параметры несколькими способами

1 Ответ

1 голос
/ 27 августа 2010

SetValue принимает указатель так же, как SetNewValue, поэтому вы можете передать значение указателя прямо через:

void A::SetNewValue(const int* p)
{
    SetValue(p);    
}

Я также исправил отсутствующий тип возврата void в определении вашей функции.

Вы должны иметь возможность вызывать его с указателем на int или const int, потому что вы всегда можете добавить a const на верхнем уровне при передаче указателя .:

A a;

int a_value = 4;

a.SetNewValue(&a_value);

Я исправил вашу переменную a так, чтобы она создавалась по умолчанию;Я думаю, что попытка инициализировать не указатель a указателем на Anew A), вероятно, была ошибкой.

Я изменил -> на ., так как aне указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...