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

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

int a;

int b;

int c;

void DoStuff()
{

}

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

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

Благодарю вас!

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();
}

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

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

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

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

Другие вопросы по тегам