внешняя ошибка ссылки g ++ - PullRequest
       37

внешняя ошибка ссылки g ++

2 голосов
/ 10 сентября 2009

У меня есть проблема, которая воспроизводится на g ++. VC ++ не встречает никаких проблем. Итак, у меня есть 2 файла cpp:

1.cpp:

#include <string>
#include <iostream>

extern const std::string QWERTY;

int main()
{
    std::cout << QWERTY.c_str() << std::endl;

}

файле 2.cpp:

#include <string>
const std::string QWERTY("qwerty");

Никакой магии, я просто хочу поместить строковые константы в отдельный файл. Во время ссылки ld выдает ошибку: «неопределенная ссылка на _QWERTY» Первый подумать обернуть обе декларации в "extern" C "" - не помогло. Ошибка и не C ++ _QWERTY все еще там.

Заранее спасибо за любые предложения

Ответы [ 2 ]

6 голосов
/ 10 сентября 2009

Похоже, вы, вероятно, сталкиваетесь с этим стандартом:

В C, объект с определенными константами в файле область без явного хранения Спецификатор класса имеет внешнюю связь. В C ++ он имеет внутреннюю связь.

Внесите это изменение в 2.cpp:

#include <string>
extern const std::string QWERTY("qwerty");

Есть еще несколько подробностей о том, что означает «связь» в этом вопросе - Что такое внешняя связь и внутренняя связь в C ++ .

0 голосов
/ 10 сентября 2009

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

1.cpp

...
extern std::string QWERTY;
...

2.cpp
#include <string>
std::string QWERTY("qwerty");

Или вы можете объявить / определить ее как const-строку в общем заголовке.

Добавление лишнего extern в 2.cpp также приведет к его компиляции, но я не уверен, что это стандарт или какой-то g ++ 'extra'

...