Как мне объявить внешний указатель на символ? - PullRequest
0 голосов
/ 16 февраля 2010

Файл 1:

static char* const path; //GLOBAL

int main()
{
   path = FunctionReturningPath();
   UsePath()
}

Файл 2:

extern char* const path; //GLOBAL from file 1

UsePath() //function using global
{
   something = path;
}

(Псевдо)

Хотелось бы использовать путь в файле 2.
Я определяю глобальное в main в файле 1, это плохая практика с использованием глобального?

и не компилируется:

Compile Error: error LNK2001: unresolved external symbol _path

Любая помощь приветствуется. Спасибо.

Ответы [ 3 ]

6 голосов
/ 16 февраля 2010
static char* path; //GLOBAL

Неверно.статичность означает, что он является локальным для файла и не может быть открыт с помощью extern.Вы хотите:

char* path; //GLOBAL
5 голосов
/ 16 февраля 2010

Ключевое слово static в области видимости файла означает, что переменная связана с этим модулем компиляции. Избавься от этого.

1 голос
/ 16 февраля 2010

Удалите ключевое слово static, так как оно сделает символ невидимым для компоновщика.

В общем, вы должны избегать глобальных переменных, где вы можете. Вместо этого передайте переменную в качестве параметра, где это возможно, или используйте пространство имен (если вы используете C ++). С глобальными переменными вы рискуете столкновением имен с внешними библиотеками, и переменная может быть изменена из любого места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...