Pergunta

Eu estou tentando construir um novo projeto .NET C ++ a partir do zero. Estou planejando para misturar código gerenciado e não gerenciado neste projeto.

este tópico do fórum IDataObject: ambíguo símbolo de erro responde a um problema que eu vi várias vezes

Post Número 4 estados "Mover todos 'usando namespace XXXX' de .h para .cpp"

Isto parece uma boa idéia, mas agora em meus arquivos de cabeçalho eu preciso parâmetros de referência do .NET Framework como

void loadConfigurations(String^ pPathname);

Como é que eu vou mover o uso de declarações no arquivo .cpp e usar os namespaces acordo no arquivo .h?

Foi útil?

Solução

É uma boa idéia sempre usar nomes totalmente qualificados em arquivos de cabeçalho. Como a instrução using afeta toda seguinte código independentemente da #include, colocando uma declaração using em um arquivo de cabeçalho afeta a todos que podem incluir esse cabeçalho.

Assim que você mudaria sua declaração de função no seu arquivo cabeçalho para:

void loadConfigurations(SomeNamespace::String^ pPathname);

onde SomeNameSpace é o nome do namespace que você era using anteriormente.

Outras dicas

Eu não sei muito sobre .NET, por isso a minha resposta se aplica unicamente à parte não gerenciado c ++ da sua pergunta. Pessoalmente, esta é uma das principais razões que me evitar como praga "usando namespace XXXX;" declarações.

Eu prefiro apenas ser explícito com namespaces como "std :: cout << "Olá mundo" << std :: endl;"

Este namespace evitar colisões e nunca há qualquer ambiguidade quanto ao local onde algo veio. Além disso, quando você faz algo como "usando namespace std;" você está desfazendo meio que namespaces dar-lhe. Eles foram projetados para colisões evitar e importando tudo para o global, que acabou de convidar colisões de volta.

Esta é stricly uma questão de opinião e gosto.

Como para o que fazer em cabeçalhos, eu apenas material de escrita assim: "f void (const std :: string & s);"

Para resolver este Eu fiz isso no arquivo .h:

namespace TestClassNS
{
  class TestClass;
}

e, em seguida, no arquivo .cpp Eu # include o .h que TestClass estava dentro e fazer as usando namespaceTestClassNS lá.

O meu C ++ está enferrujado, portanto, pode haver uma maneira melhor.

Na minha experiência, o único namespace você tem que ter cuidado com é próprio sistema. É um pouco chato que o mais comum, mais importante é onde você encontrar problemas, mas é a vida.

Pelo menos você pode tomar o conforto que se você está criando classes gerenciadas, você é problemas com inclui irá obter alívio na barreira de montagem, ao contrário de problemas com arquivos de cabeçalho para as classes não gerenciados.

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