Я столкнулся с интересной проблемой в том, что, похоже, должно быть стандартной реализацией 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
С++: производный класс от CRTP не может получить доступ к своим собственным переменным [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1733076400
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79239536/c-derived-class-from-crtp-cant-access-its-own-variables[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия