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

Foi útil?

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'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top