Почему статическая функция-член может быть объявлена статической только внутри определения класса, а не в своем собственном определении?
Реализуя класс для создания / обновления блоков на экране, я хотел добавить статическую функцию-член, которая гарантирует, что никакие видимые в настоящее время блоки не перекрываются (получение информации из массива статических указателей для всех видимых в настоящее время блоков)
Мой исходный код имел следующую структуру:
class Box
{
public:
// ...
static void arrangeOverlappingBoxes();
};
static void Box::arrangeOverlappingBoxes()
{
// ...
}
Я был очень удивлен, что это вызвало ошибку C2724: «static» не должен использоваться в функциях-членах, определенных в области видимости файла.
С некоторыми пробами, гуглом и ошибкой я понял, что определение моей функции должно потерять ключевое словоstatic
т.е. это должно быть
void Box::arrangeOverlappingBoxes()
{
// ...
}
Тем не менее, я не имею ни малейшего понятия, что за этим стоит. Это кажется настолько асимметричным и вводящим в заблуждение иметь другой заголовок функции для ее объявления в определении класса и его собственном определении. Есть ли причина для этого?