Проблема с ключевым словом "extern" - PullRequest
4 голосов
/ 15 июля 2010

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

int a;

int b;

int c;

void DoStuff()
{

}

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

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

Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 июля 2010

Попробуйте это

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

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();
}
1 голос
/ 15 июля 2010

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

0 голосов
/ 15 июля 2010

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

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

0 голосов
/ 15 июля 2010

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

...