Похоже, вы пытаетесь получить доступ к методам/данным базового класса из экземпляра производного класса.
Вместо :
auto canvasObj = parseCanvas(one, two);
Three l_three = CanvasObject::ParentOfCanvas->getThree(); //this isn't working
Использовать :
auto canvasObj = parseCanvas(one, two);
Three l_three = canvasObj.getThree(); // or maybe canvasObj->getThree()
Причина, по которой ваша не сработала, заключается в том, что это своего рода путаница при попытке доступа к «статической» функции-члену вместо одной в конкретном экземпляре. В моем решении я получаю доступ к данным getThree в объекте холста, который вы создали из возврата parseCanvas.
С другой стороны, если мое решение не работает, возможно, parseCanvas возвращает неправильный тип данных. То есть я ожидаю, что он вернет CanvasObject, но вы не указали подпись для этого метода. Возможно, вам придется привести или заменить auto именно тем типом, который вам нужен (CanvasObject*). Возможно, что parseCanvas может возвращать тип const, а getThree не помечен как const, поэтому у вас возникнут проблемы с его вызовом.
Возможно, если бы вы указали точную ошибку компилятора, мы могли бы сузить ее еще больше.
РЕДАКТИРОВАТЬ:
Судя по вашим комментариям, объекту холста возвращается дополнительный указатель базового класса, и вы пытаетесь вызвать метод производного класса. Этого нельзя делать. Вам нужно настроить свой метод parseCanvas, чтобы он возвращал указатель производного класса, или вам нужно (ОЧЕНЬ ПЛОХАЯ ИДЕЯ) перевести указатель из базового класса в производный (если вы действительно знаете, что это действительно такой тип).
person
LawfulEvil
schedule
10.03.2015
canvasObj->getThree()
должно работать - person Mustafa Ozturk   schedule 10.03.2015parseCanvas()
? - person Paul Evans   schedule 10.03.2015