2009-08-08 3 views
1

У меня есть класс под названием MODEL, в котором находится общедоступный static int theMaxFrames. Класс определяется в собственном файле заголовка. Доступ к макс-кадрам осуществляется классом в классе MODEL и одной функцией void set_up(), которая также находится в классе MODEL. Исходный файл Render.cpp содержит функцию, вызывающую функцию в исходном файле Direct3D.cpp, которая, в свою очередь, вызывает функцию set_up() через объект MODEL. Это единственное соединение между этими двумя исходными файлами и файлами MaxFrames.Ошибка компоновщика Visual C++

Когда я пытаюсь скомпилировать мой код я получаю следующее сообщение об ошибке:

1> Direct3D.obj: ошибка LNK2001: неразрешенный внешний символ "общественность: статическая ИНТ МОДЕЛЬ :: theMaxFrames"? (TheMaxFrames @ MODEL @ @ 2HA)

1> Render.obj: LNK2001 ошибки: неразрешенный внешний символ? "общественность: статический INT MODEL :: theMaxFrames" (theMaxFrames @ MODEL @@ 2ha)

1> C: \ Users \ Byron \ Documents \ Visual Studio 2008 \ Projects \ xFileViewer \ Debug \ xFileViewer.exe: фатальная ошибка LNK1120: 1 неразрешенные внешние

ответ

2

Это очень похоже на то, что вы объявили theMaxFrames в классе, но вы не указали для него определения.

Если это так, вам нужно предоставить определение для него в .cpp где-нибудь.

например.

int MODEL::theMaxFrames; 

В этом FAQ есть вопрос: static data members.

+0

Спасибо! Это решило это. Но я не уверен, почему это необходимо, не могли бы вы представить какую-то необходимую информацию? – LordByron

+0

Это требование к языку. Если вы объявляете статическую переменную в классе, то вам нужно предоставить определение для нее вне тела класса где-то. –

+0

Поскольку заголовочные файлы не содержат распределения переменных. Все, что должно присутствовать в исполняемом файле, должно быть указано в файле CPP где-нибудь. Заголовки - это контракт между различными исходными файлами для обеспечения вещей. Исходными файлами являются реализации, которые удовлетворяют контрактам, указанным в заголовках. Если вам не удается выполнить контракт, возникает ошибка компоновщика. –

Смежные вопросы