Проблема с ключевым словом "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++, или у вас могут возникнуть проблемы со схемой именования.
Вы уверены, что ссылаетесь в объектном файле, который соответствует исходному файлу, содержащему ваши методы и переменные?