Утверждение \ Выражение дает переменную, не действительную вокруг позиции 2

Для параметра class или struct, такого как ваш example, правильный ответ использует new не malloc() для размещения экземпляра. Только operator new знает, как вызвать конструкторы для struct и его членов. Ваша проблема вызвана тем, что элемент строки не был сконструирован.

Однако есть редкие случаи, когда важно, чтобы определенный патч памяти действовал так, как если бы он содержал экземпляр класса. Если у вас действительно есть такой случай, существует вариант operator new, который позволяет указать местоположение объекта. Это «размещение нового» и должно использоваться с большой осторожностью.

void *rawex = malloc(sizeof(example));  // allocate space
example ex = new(rawex) example();      // construct an example in it
ex->data = "hello world";               // use the data field, not no crash
// time passes
ex->~example();                         // call the destructor
free(rawex);                            // free the allocation

Используя новое место размещения, вы обязаны предоставить область памяти правильного размер и выравнивание. Не предоставление правильного размера или выравнивания приведет к таинственным вещам. Неправильное выравнивание обычно быстрее вызывает проблему, но также может быть загадочным.

Кроме того, с новым местом размещения вы берете на себя ответственность за вызов деструктора вручную и в зависимости от происхождения блока памяти, выпуская его своему владельцу.

В общем, если вы уже не знаете, что вам нужно место нового, вам почти наверняка не нужно. Он имеет законное использование, но есть неясные углы каркасов, а не повседневные события.

0
задан Twisterr1000 18 January 2019 в 11:44
поделиться

1 ответ

Правильный синтаксис для этой ситуации будет следующим: "!this.getParent().get('activeTestData')->getData() == null"

Вы можете увидеть больше примеров и подробностей в документации Symfony .

Я обновил свой ответ. В этом контексте «this» является объектом Form поля «activeTestDataUnit». Поэтому, чтобы проверить значение «activeTestData», нужно перейти к родителю, а затем получить правильного потомка.

Начиная с Symfony 4.1 вы можете передавать свои пользовательские значения в аргумент «values» и избегать всего этого беспорядка, передавая $builder->getData(). Смотрите здесь для получения дополнительной информации о документации Symfony

0
ответ дан Jokūbas 18 January 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: