g ++ erro de referência externo
-
05-07-2019 - |
Pergunta
Eu tenho problema que é reproduzido em g ++. O VC ++ não encontrar quaisquer problemas. Então, eu tenho arquivos 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");
Nenhuma mágica, eu só quero constantes string lugar em arquivo separado. Em tempo de link ld produz um erro: "undefined reference to` _QWERTY '" O primeiro pensar para embrulhar ambas as declarações em "externo 'C'" - não ajudou. Erro e não c ++ _QWERTY ainda está lá.
Agradecemos antecipadamente para quaisquer sugestões
Solução
Parece que você provavelmente está correndo para este bit do padrão:
Em C, um objeto const qualificado no arquivo alcance sem um armazenamento explícita classe especificador tem ligação externa.
Em C ++, que tem ligação interna.
Faça esta mudança para 2.cpp:
#include <string>
extern const std::string QWERTY("qwerty");
Há mais alguns detalhes sobre o que significa "ligação" de esta questão - O que é ligação externa e ligação interna em C ++ .
Outras dicas
Eu teria que procurá-lo, mas acho que as variáveis ??globais const tem ligação interna em C ++, não use const
e ele vai compilar bem.
1.cpp
...
extern std::string QWERTY;
...
2.cpp
#include <string>
std::string QWERTY("qwerty");
Ou você poderia declarar / defini-lo como uma string const em um cabeçalho comum de curso.
Adicionando um extern
supérfluo o 2.cpp vai obtê-lo para compilar também, mas eu não tenho certeza se isso é normal ou algum g ++ 'extra'