У меня есть программа main.cpp
, которая включает файл заголовка. Реализация функций находится в другом файле cpp
.Ошибка при связывании внешней переменной C++
ответ
Вы указали фактическое хранилище переменных в главном? В приведенном ниже примере внешние переменные объявляются в common.h. Но фактическое хранилище для этого vars in in main.cpp.
==> common.h <==
extern int var1, var2, var3, var4;
==> main.cpp <==
#include <iostream.h>
#include "common.h"
#include "other.h"
int var1, var2, var3, var4 = 4; /* the actual storage */
int main(int argc, char **argv)
{
std::cout << sumVars() << endl;
}
==> other.h <==
int sumVars();
==> other.cpp <==
#include "common.h"
int sumVars() {
return var1 + var2 + var3 + var4;
}
похоже на мой код, но я объявлял эти переменные в main(); как я могу использовать их в других функциях, объявленных в других файлах cpp, без необходимости делать эти переменные глобальными, как вы? Lifny –
Если вы объявили их внутри main, то они являются локальными переменными (в стеке) и не могут быть напрямую использованы другими функциями даже в том же исходном файле и не могут иметь внешнюю связь. –
Пожалуйста, потратьте немного времени, чтобы прочитать [страницы справочной информации] (http://stackoverflow.com/help), особенно разделы, названные (HTTP [ «Какие темы я могу спросить здесь?»]: // stackoverflow.com/help/on-topic) и [«Какие типы вопросов я должен избегать?»] (http://stackoverflow.com/help/dont-ask). И что еще более важно, прочитайте [контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist). Вы также можете узнать, что такое [SSCCE] (http://sscce.org/). –
показать нам код –
Являются ли переменные, объявленные в функции 'main()' или перед этим? Он должен быть до этого, делая их [глобальными переменными] (http://www.learncpp.com/cpp-tutorial/42-global-variables/). – Proxy