Инициализация встроенной структуры: «нестатический член должен быть относительно статического объекта»

У меня возникла небольшая проблема со ссылкой на члены внешней структуры из вложенной структуры. Когда я пытаюсь установить x и y на width и height, появляется ошибка «нестатический член должен быть относительно статического объекта», вот код:

const int width = 1280, height = 720;
struct MandelbrotBase
{
    int width = ::width, height = ::height;
    ...
    struct
    {
        int x = width / 2;
        int y = height / 2;
    } pos;
} mb;
__global__ void generate_mandelbrot(unsigned int* colors, MandelbrotBase mb)
{
...
}

Разве это не большая проблема, поскольку вместо этого я могу ссылаться на глобальные ::width и ::heigth или на другие методы для инициализации. Но есть ли возможность сделать это просто внутри? Использование конструктора-члена или функции не является вариантом, по крайней мере, не является предпочтительным вариантом, поскольку я использую его для передачи информации в функции ядра cuda, поэтому я хочу, чтобы это было очень просто.

Что вы подразумеваете под «Но есть ли возможность сделать это просто в режиме онлайн?»? Можете ли вы привести пример того, чего вы хотите достичь?

NathanOliver 15.07.2024 18:13

@NathanOliver Просто встроенный — это то, как это показано в предоставленном примере кода, см. x и y, инициализированные онлайн, пытаясь сослаться на ширину и высоту внешних членов структуры. Я хочу именно этого, если существует какой-то синтаксис, позволяющий это сделать.

armagedescu 15.07.2024 18:16

это будет проблемой и в C++. Не уникально для CUDA.

Robert Crovella 15.07.2024 18:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это как

const int width = 1280, height = 720;

struct MandelbrotBase {
  int width = ::width, height = ::height;
  struct {
    int x;
    int y;
  } pos = {.x = width / 2, .y = height / 2};
} mb;

void generate_mandelbrot(unsigned int* colors, MandelbrotBase mb) {}

На нестатические width и height нельзя ссылаться вне членов MandelbrotBase без объекта. Безымянная структура не является частью определения структуры MandelbrotBase, безымянная структура просто определена в области имени структуры MandelbrotBase.

Спасибо, приятно. Это работало так pos = { width / 2, height / 2}

armagedescu 15.07.2024 18:25

Небольшая поправка static constexpr int width = 1280;

Pepijn Kramer 15.07.2024 18:32

Другие вопросы по теме