У меня есть этот реф класс:Как инициализировать класс C++/cx с помощью агрегатной инициализации?
namespace N
{
public ref class S sealed
{
public:
property Platform::String^ x;
};
}
Как инициализировать его на месте с общим инициализатором? Я пробовал:
N::S s1 = { %Platform::String(L"text") };
но компилятор говорит
ошибка C2440: 'инициализации': не удается преобразовать из 'списка инициализатора' в 'N :: S'
Также:
N::S s1 { %Platform::String(L"text") };
и погрешность составляет:
C2664 ошибка: 'N :: S :: S (Const N :: S%)': не удается преобразовать аргумент 1 из 'Platform :: String ^' к 'сопзЬ N :: S%'
Это прекрасно работает со стандартным C++, как это:
struct T
{
wstring x;
};
T x { L"test" };
Я не хочу использовать конструктор здесь.
Ваш класс ref является типом interop, свойство на самом деле не является полем в классе. Просто удобный синтаксический сахар для программиста на C++. Но для вызова функции (set_x) требуется инициализировать значение, несовместимое с списком инициализаторов. Вам нужен 's1.x =" test ";', компилятор автоматически создает платформу :: String и преобразует ее в вызов метода интерфейса. –