Нет жизнеспособных перегруженных - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть 2 класса CVKinectWrapper.cpp и main.cpp .В CVKinectWrapper в bool CVKinectWrapper::update(){ ... у меня есть переменная XnSkeletonJointPosition righthand; Я хотел бы получить доступ к этой переменной в классе main.cpp .для этого я создал

`void CVKinectWrapper::getRightHand(XnSkeletonJointPosition *righthand){
  //*righthand = righthand;

  righthand->copyTo(*righthand);
}`

Прямое назначение не работает, я получаю эту ошибку = ' Нет соответствия для' operator = 'в * righthand = righthand '.CopyTo не работает, потому что у типа данных righthand нет этого метода.

Для дополнительной информации:

Вот так я получаю доступ к оболочке в основном классе = CVKinectWrapper *wrapper = CVKinectWrapper::getInstance();

 wrapper->getRightHand(XnSkeletonJointPosition *righthand)

Теперь у меня вопрос: как мне получить доступ к правой переменной из CVKinectWrapper в основном классе.

Это, наверное, очень простой вопрос, но я немного новичок в c ++.Заранее спасибо.

1 Ответ

2 голосов
/ 20 ноября 2011

Когда вы спрашиваете об ошибках компилятора, обычно хорошей идеей является предоставление точного сообщения об ошибке, в котором в этом случае, вероятно, указывается тип двух аргументов.В любом случае, я думаю, что могу догадаться, в чем проблемы.

Вы упомянули, что у вас есть переменная с именем righthand, которая, как я полагаю, на самом деле является членом класса, иВы хотите скопировать значение в другую переменную, переданную в функцию getRightHand.Теперь проблема в том, что аргумент функции имеет то же имя, что и член, и это shadowing it.Внутри getRightHand идентификатор righthand относится к аргументу, а не к члену.Это можно решить, изменив имя аргумента или уточнив доступ к члену: *righthand = this->righthand;

Что касается конкретного сообщения об ошибке, операция *righthand = righthand; буквально означает присвоение значения указателя righthand (аргумент функции) на объект, на который она указывает, что не имеет особого смысла.С точки зрения дизайна, функция в том виде, в каком она есть, совершенно не идиоматична в C ++ и, вероятно, должна быть заменена на:

const XnSkeletonJointPosition& CVKinectWrapper::getRightHand() const {
  return righthand;
}

И вызывающая сторона сделает:

XnSkeletonJointPosition res = wrapper.getRightHand();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...