У меня возникла небольшая проблема со ссылкой на члены внешней структуры из вложенной структуры. Когда я пытаюсь установить 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 Просто встроенный — это то, как это показано в предоставленном примере кода, см. x и y, инициализированные онлайн, пытаясь сослаться на ширину и высоту внешних членов структуры. Я хочу именно этого, если существует какой-то синтаксис, позволяющий это сделать.
это будет проблемой и в C++. Не уникально для CUDA.
Вы можете сделать это как
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}
Небольшая поправка static constexpr int width = 1280;
Что вы подразумеваете под «Но есть ли возможность сделать это просто в режиме онлайн?»? Можете ли вы привести пример того, чего вы хотите достичь?