Предупреждение не говорит о том, что они не определены. В предупреждении конкретно сказано, что они определены, но не используется . То есть вы что-то просили, но потом не использовали.
Ваша настоящая проблема в том, что это static
глобальные переменные. Это означает, что каждый файл .c или .cpp, содержащий заголовок, будет иметь свою собственную копию этой переменной.
Таким образом, если у вас есть a.cpp
и b.cpp
, которые включают share.h
, a.cpp
может изменить width
на 20, но b.cpp
не может увидеть эффект от этого изменения. Вот почему компилятор выдает предупреждение. Потому что, если вы объявляете static size width
в файле и не используете его в этом конкретном файле, то вы определенно не сможете использовать его где-либо еще . И это подозрительное поведение - определять переменную, которую вы никогда не используете.
В общем, вы никогда не должны помещать глобальные static
переменные в заголовок. Если вам нужны постоянные значения, вы должны объявить их так:
const size width=10;//Used by about 60%
const size height = 12;//Used by about 60%
Если вы не хотите, чтобы они были постоянными, вы должны объявить их в заголовке с extern
(без их инициализации), затем выбрать один .cpp файл и определить их (без *) 1032 *, но со значением). Следующим образом:
//share.h
extern size width;
extern size height;
//share.cpp
size width = 10;
size height = 12;