Почему статическая функция-член может быть объявлена ​​статической только внутри определения класса, а не в своем собственном определении?

Реализуя класс для создания / обновления блоков на экране, я хотел добавить статическую функцию-член, которая гарантирует, что никакие видимые в настоящее время блоки не перекрываются (получение информации из массива статических указателей для всех видимых в настоящее время блоков)

Мой исходный код имел следующую структуру:

class Box
{
public:
    // ...
    static void arrangeOverlappingBoxes();
};

static void Box::arrangeOverlappingBoxes()
{
    // ...
}

Я был очень удивлен, что это вызвало ошибку C2724: «static» не должен использоваться в функциях-членах, определенных в области видимости файла.

С некоторыми пробами, гуглом и ошибкой я понял, что определение моей функции должно потерять ключевое словоstaticт.е. это должно быть

void Box::arrangeOverlappingBoxes()
{
    // ...
}

Тем не менее, я не имею ни малейшего понятия, что за этим стоит. Это кажется настолько асимметричным и вводящим в заблуждение иметь другой заголовок функции для ее объявления в определении класса и его собственном определении. Есть ли причина для этого?

Ответы на вопрос(1)

Ваш ответ на вопрос