Похоже, что вы пытаетесь получить доступ к методам базового класса/данные из экземпляра производного класса.
Вместо:
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' на объекте canvas, который вы создали из возврата parseCanvas.
В противном случае, если мое решение не работает, возможно, parseCanvas возвращает неправильный тип данных. То есть, я ожидаю, что он вернет CanvasObject, но вы не предоставили подпись этому методу. Вам может потребоваться бросить или заменить авто с точным типом, который вы хотите, чтобы он был (CanvasObject *). Его posisble, что parseCanvas может возвращать тип const, и getThree не помечен как const, так что вам будет сложно его вызвать.
Возможно, если вы предоставили точную ошибку компилятора, мы могли бы сузить ее дальше.
EDIT:
на основе ваших комментариев, объект холст возвращается еще указатель базового класса, и вы пытаетесь вызвать метод производного класса. Это невозможно. Вам нужно настроить метод parseCanvas для возврата указателя производного класса или вам нужно (VERY BAD IDEA) передать указатель из базового класса в производный (если вы действительно знаете, что это действительно тот тип).
Что означает «не работает»? Не компилируется? –
Компилятор говорит, что у AnotherObject нет члена getThree(); Это использование canvasObj-> getThree(); – Michele
Вопрос, на который вы ссылаетесь, обратный круг. –