У меня есть этот класс, который имеет статический член. это также базовый класс для нескольких других классов в моей программе. Вот его заголовочный файл:undefined ссылка на переменную статического члена
#ifndef YARL_OBJECT_HPP
#define YARL_OBJECT_HPP
namespace yarlObject
{
class YarlObject
{
// Member Variables
private:
static int nextID; // keeps track of the next ID number to be used
int ID; // the identifier for a specific object
// Member Functions
public:
YarlObject(): ID(++nextID) {}
virtual ~YarlObject() {}
int getID() const {return ID;}
};
}
#endif
и вот его файл реализации.
#include "YarlObject.hpp"
namespace yarlObject
{
int YarlObject::nextID = 0;
}
Я использую G ++, и он возвращает три undefined reference to 'yarlObject::YarlObject::nextID
ошибки компоновщика. Если я изменяю фразу ++nextID
в конструкторе только nextID
, тогда я получаю только одну ошибку, и если я ее поменяю на 1
, тогда она правильно свяжется. Я думаю, что это что-то простое, но что происходит?
99.9% уверен, потому что он правильно связывается, когда я меняю '++ nextID' на' 1'. – Max
, если вы не ссылаетесь на 'nextID', тогда вам не нужно его определять. Так что это не показатель наличия этого определения в финальном исполняемом файле. Фактически, тот факт, что он работает, указывает на то, что вы * не пропустите ссылку на файл реализации. –