С++: производный класс от 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • С++: производный класс от CRTP не может получить доступ к своим собственным переменным [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как заменить класс RelationalModelValidtor ядра EF (C#) своим собственным классом?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как заменить класс RelationalModelValidator EF Core (C#) своим собственным классом?
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Представление компонента Laravel не может получить доступ к своим общедоступным переменным
    Гость » » в форуме Php
    0 Ответы
    44 Просмотры
    Последнее сообщение Гость
  • Woocommerce удалить фильтр плагинов и заменить своим собственным
    Anonymous » » в форуме Php
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

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