1
resposta

Declarar namespace no header

Consigo usar as duas formas de declaração de namespace nos arquivos .cpp

Tanto usando um bloco com a palavra namespace:

namespace Nome {
    void minha_function() {}
}

Quanto:

void Nome::minha_function() {}

Mas não consigo declarar o namespace no header das funções usando:

void Forca::print_wrong_letters(const std::vector<char> &wrong_letters);

Recebo um erro que avisa sobre a inexistência desse namespace.

Consigo apenas se usar o primeiro método:

namespace Forca {
    void print_wrong_letters(const std::vector<char> &wrong_letters);
}

Gostaria só de saber se isso é normal ou é a versão do compilador (g++11) que não permite.

1 resposta

Vc consegue usar o formato void Nome::function() ... no cpp, porque já foi declarado no header anteriormente. O formato Nome::funcion() pode ser usado para a definição apenas se já houve a declaração do namespace e da função dentro deste namespace anteriormente (num header, provavelmente).

Isto é parte da definição da linguagem e não deve ter comportamento diferente com outros compiladores.