Ctor, не разрешенный тип возврата

См. Расширение параметра в man bash:

   ${parameter#word}
   ${parameter##word}

Удалить соответствующий шаблон префикса. Слово расширяется для создания шаблона так же, как при расширении пути. Если шаблон совпадает с началом значения параметра, то результатом расширения является расширенное значение параметра с кратким шаблоном соответствия (случай #) или самый длинный шаблон соответствия (случай ##). Если параметр равен @ или *, операция удаления паттерна применяется поочередно по каждому позиционному параметру, а расширение - это результирующий список. Если параметр представляет собой переменную массива с индексом @ или *, операция удаления шаблона применяется поочередно к каждому члену массива, а расширение - результирующий список.

  ${parameter%word}
  ${parameter%%word}

Удалить соответствующий шаблон суффикса. Слово расширяется для создания шаблона так же, как при расширении пути. Если шаблон соответствует конечной части расширенного значения параметра, то результатом расширения является расширенное значение параметра с кратчайшим шаблоном соответствия (случай %) или самый длинный шаблон соответствия (случай %%), удален. Если параметр равен @ или *, операция удаления паттерна применяется поочередно по каждому позиционному параметру, а расширение - это результирующий список. Если параметр представляет собой переменную массива, подстроенную с помощью @ или *, операция удаления шаблона применяется поочередно к каждому члену массива, а расширение является результирующим списком.

Короче , # удаляет рисунок слева, % справа, удвоение символа делает совпадающим жадным. (Мнемоника: # находится слева от % на большинстве клавиатур).

41
задан There is nothing we can do 5 April 2010 в 16:57
поделиться

2 ответа

Вы пропустили точку с запятой после вашего определения struct.


Ошибка правильная, конструкторы не имеют возвращаемого типа. Поскольку вы пропускаете точку с запятой, все определение структуры рассматривается как тип возвращаемого значения для функции, например:

// vvv return type vvv
struct { /* stuff */ } foo(void)
{
}

Добавьте точку с запятой:

struct B
{
    int* a;
    B(int value):a(new int(value))
    {   }
    B():a(nullptr){}
    B(const B&);
}; // end class definition

// ah, no return type
B::B(const B& pattern)
{

}
70
ответ дан GManNickG 27 November 2019 в 00:32
поделиться

Вам нужен компилятор получше. В g ++:

a.cpp:1: error: new types may not be defined in a return type
a.cpp:1: note: (perhaps a semicolon is missing after the definition of 'B')
a.cpp:5: error: return type specification for constructor invalid

Точка с запятой необходима, потому что она завершает возможный список экземпляров структуры:

struct B {
...
} x, y, z;

Создает три экземпляра B, называемых x, y и z. Это часть наследия C ++, и он все еще будет присутствовать в C ++ 0x.

12
ответ дан 27 November 2019 в 00:32
поделиться
Другие вопросы по тегам:

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