С++: производный класс от CRTP не может получить доступ к своим собственным переменным [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
С++: производный класс от CRTP не может получить доступ к своим собственным переменным [закрыто]

Сообщение Anonymous »

Я столкнулся с интересной проблемой в том, что, похоже, должно быть стандартной реализацией CRTP. Я использую g++ и c++23, если это имеет значение.
Здесь Drawable — базовый класс, а ImageDrawable наследуется от него. используя CRTP, как показано ниже. В моем основном коде я инициализирую объект ImageDrawable как Drawable Drawing = ImageDrawable(image, true) для изображения, которое я указываю. В конструкторе диагностика печатается нормально, и все выглядит так, как будто this->_image = image.
Однако в моем основном коде строка после инициализации объекта , я распечатываю его параметр isntshit, и он не только не 1, как следует из списка инициализации, но и не 0, а 1634036736.
Далее я печатаю диагностические данные _image, и несмотря на то, что _image должно быть либо image, либо Grid
(15, 16) , это ни то, ни другое, а Grid().
Я просмотрел примеры, но я в тупике, как кажется другим сделать то же самое без проблемы.
Кроме того, когда get_pixel запускается, _image содержит еще другие данные, которые снова не являются ни одним из значений, которые он должен принимать, и приводит к SegFault.
Любая помощь приветствуется. Мой код ниже.
drawabletypes.cpp
#ifndef DBLE_TYPES_H
#define DBLE_TYPES_H

#include "drawable.cpp"

using namespace std;

class ImageDrawable : public Drawable < ImageDrawable > {

private:

const int _rows, _cols; // image size

public:

Grid < Pixel > _image {15, 16};

int isntshit = 0;

ImageDrawable (
Grid < Pixel > & image,
bool from_centre = false,
float rotate = 0,
float scale_factor = 1,
float current_pos_x = 0,
float current_pos_y = 0
) :

Drawable < ImageDrawable > (
from_centre,
rotate,
current_pos_x,
current_pos_y,
image.height() / 2.0,
image.width() / 2.0
),

_image ( image ),
_rows ( image.height() ),
_cols ( image.width() ),
isntshit ( 1 )
{
cout

Подробнее здесь: https://stackoverflow.com/questions/792 ... -variables

Вернуться в «C++»