Проблема с ключевым словом «extern»

У меня есть набор глобальных переменных и метод в файле cpp.

int a;

int b;

int c;

void DoStuff()
{

}

в заголовочном файле я объявил их явно с помощью ключевого слова extern. Моя проблема в том, что когда я включаю файл заголовка в другой файл C++, я не могу использовать внешние переменные и метод. Он выдает ошибку компоновщика, говорящую ошибка LNK2001: неразрешенный внешний символ для методов и переменных. Что я здесь сделал не так??

PS: метод DoStuff() заполняет переменные. Все файлы заголовков и файлы cpp находятся в одной папке проекта.

Спасибо!


person Izza    schedule 15.07.2010    source источник


Ответы (4)


Попробуй это

Определите эти переменные внутри вашего заголовка, а не просто объявляйте их.

extern int x; - это просто объявление (не определение)

Простой пример

a.cpp

 int a,b,c; //definition

 void doStuff(){ 

 }

b.cpp

extern int a,b,c; //extern keyword is mandatory
void doStuff();   //extern keyword is optional because functions by default have external linkage

int main()
{

   doStuff();
}
person Prasoon Saurav    schedule 15.07.2010

Вы должны включить файл .cpp, который определяет эти extern переменные и функцию, объявленную в вашем заголовке, в набор для компиляции. Если файл .cpp, содержащий определения, не скомпилирован и не связан с файлом, который использует объявления из вашего файла заголовка, вы получите ошибки компоновщика.

person Justin Summerlin    schedule 15.07.2010

Вы уверены, что ссылаетесь на объектный файл, соответствующий исходному файлу, содержащему ваши методы и переменные?

person Mark B    schedule 15.07.2010

Поскольку вы используете Visual-C++ (согласно тегу), я бы просто убедился, что все ваши файлы находятся в одном проекте при компиляции. Убедитесь, что вы создаете проект, а не просто создаете файл.

Я сомневаюсь, что это так, но вы также можете проверить, что исходные файлы скомпилированы либо как C, либо как C++, иначе у вас могут возникнуть проблемы со схемой именования.

person Xzhsh    schedule 15.07.2010