Инициализация массива классов

0

Доброе утро. Вопрос заключается в инициализации объекта. Его легко сделать так:

class MyClass {
  char* data;
public:
  inline MyClass(char* s) {
    data = s;
  };    
}

MyClass Obj = "foo";

Но возможно ли сделать синтаксис инициализации (с теми же действиями), как это?

MyClass Obj[] = "foo";

Мне нужны скобки для совместимости с другим компилятором:/

  • 1
    1) это работает? 2) вам нужен массив? с одним элементом? Вы называете это «скобками», которые предполагают, что вы понятия не имеете, что делаете.
  • 2
    В первом примере используется опасная и устаревшая функция или C ++ 03: привязка неконстантного char* к строковому литералу. Вы должны изменить data на const char* . Что касается остальной части вопроса, не ясно, что вы ищете.
Показать ещё 2 комментария
Теги:
operator-overloading
constructor

1 ответ

0

Пробовали ли вы использовать список инициализации, используя {}?

MyClass Obj[] = {"foo"};

или

MyClass Obj[] = {"foo", "bar"};
  • 0
    Это не будет работать с другим компилятором, он думает, что MyClass является строкой. Хорошо, больше разъяснений. У меня есть тип данных компилятора, как "new_char". Если я хочу строку, она может быть инициализирована только так: new_char MyString[] = "foo" . Но для GCC я не могу сделать typedef char new_char , потому что typedef является его единственным синонимом, а компилятор GCC не имеет никакого значения между "char" и "new_char". И я не могу использовать некоторые перегруженные функции, которые работают только с "new_char" и не должны работать (например, сгенерировать исключение) с "char".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню