Прежде всего, случай не имеет ничего общего с «int» версией оператора присваивания, вы можете просто удалить его. Вы также можете удалить другой оператор присваивания, так как он будет сгенерирован компилятором. IE такого типа автоматически получает конструкторы копирования / перемещения и оператор присваивания. (т. е. они не запрещены, и вы просто повторяете то, что компилятор делает автоматически с явным обозначением)
В первом случае
используется инициализация копирования :
S s = {}; // the default constructor is invoked
Это назначение пост-строительной копии, но компиляторы оптимизируют такие простые случаи. Вместо этого вы должны использовать инициализацию направления :
S s{}; // the default constructor is invoked (as you have it)
Примечание: вы также можете записать:
S s; // the default constructor is invoked if you have it
Второй случай
То, что вы должны написать, это прямая инициализация правой стороны назначения копии:
t = S{};
В этой нотации будет вызываться конструктор по умолчанию (если он есть) или инициализация значения для членов (пока тип является агрегатом). Вот соответствующая информация: http://en.cppreference.com/w/cpp/language/value_initialization
попробуйте с /
CREATE OR REPLACE TYPE Banda AS OBJECT (
nr_bandy NUMBER(2)
, nazwa VARCHAR2(20)
, teren VARCHAR2(20)
, MAP MEMBER FUNCTION MapBanda RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY Banda IS
MAP MEMBER FUNCTION MapBanda RETURN NUMBER IS
BEGIN
RETURN nr_bandy;
END;
END;
/
@Simonare на 100% правильно.
Другой вариант - выделить текст для ТИПА, нажать Ctrl + Enter, затем выбрать текст для тела типа и снова нажать Ctrl + Enter.
Если вы сохраняете свой код в файл (ы) для хранения в системе управления версиями (ПОЖАЛУЙСТА, СДЕЛАЙТЕ, ЧТО ЭТО ДЕЛАЕТЕ), вам следует помнить о том, как этот код будет выполняться позже. Будет ли он использоваться в SQL * Plus? Разработчик SQL? Что-то другое? Затем напишите код для ЭТО ... что, конечно, означает, что вы также захотите проверить его.