Desafio:
Eu tenho esse código que não consegue compilar. Você consegue descobrir o que há de errado? Isso causou dor de cabeça para mim uma vez.
// header namespace values { extern std::string address; extern int port; } // .cpp file std::string ::values::address = "192.0.0.1"; int ::values::port = 12;
Parece correto à primeira vista. Quantos e quais são os erros!
Um erro:
std::string values::address = "192.0.0.1";
é a forma adequada, caso contrário, a análise é
std::string::values::address = "192.0.0.1";
e não há membros “valores” com um membro “endereço” dentro de “string” …
ele funcionará para tipos internos, já que eles nunca poderão conter membros .. então int :: values é uma análise não ambígua, int :: values, porque o prior não faz sentido.
std::string (::values::address) = "192.0.0.1";
funciona também. Observe que, se você digitar ty int int sometype; que você teria o mesmo problema usando algum tipo de string acima, mas não com “int”.
Estou atrasado para o jogo, mas preferia escrever o arquivo .cpp como:
// .cpp file namespace values { std::string address = "192.0.0.1"; int port = 12; }
Claro que isso não resolve o problema que você teve com a declaração de friend
.