Это:
cpplearningconsole.obj: ошибка LNK2001: неразрешенный внешний символ «public: static int a :: c» (? C @ a @@ 2HA)
Это не сообщение компилятора, это сообщение компоновщика. Вы получаете это, потому что, хотя вы объявили участника c
, вы не определили его. Статические члены должны быть определены только в одном исходном файле, чтобы их можно было создать. Что-то вроде:
int a::c = 0;
Что касается вашего второго вопроса, объявляя функцию как const
, говорится, что она не изменяет объект, к которому она вызывается. Ваша mod
функция не изменяет объект, она изменяет статический член. Вот почему вы не получаете ошибку компилятора.