Проблема приведения дочернего класса, когда это из функции - PullRequest
0 голосов
/ 06 апреля 2020

У меня проблема с приведением дочернего класса к функциям, которые получают родительский класс. Я думаю, что это похожая проблема, как здесь C ++ приведение к производному классу . Я пытаюсь реализовать решение с помощью этого поста, но я не нахожу никаких успехов.

сообщение об ошибке

vec_template clang++  -std=c++11 -Wconversion *.cpp && ./a.out
main.cpp:8:18: error: dynamic_cast from rvalue to reference type 'vec2<float> &'
        vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:33:2: note: in instantiation of function template specialization 'show_data<float>'
      requested here
        show_data(a);
        ^
main.cpp:8:18: error: 'vec<float> *' is not a class
        vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
                        ^                      ~~
2 errors generated.

код

#include "vec2.cpp"
#include <iostream>
#include <cstdio>

template <class T>
void show_data(vec<T> &v) {
    vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
    std::cout << "v.x(): " << temp.x() << std::endl;
    std::cout << "v.y(): " << temp.y() << std::endl;
}


int main() {
    vec2<float> a;

    std::cout << a << std::endl;

    show_data(a);
    a.x(2);
    show_data(a);

    printf("instance vec2 float: %i\n", vec2<float>::get_instance());

    return (0);
}

где vec2

template <class T>
class vec2 : public vec<T> {
  //
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...