Pergunta

Para minha classe de exceção que eu tenho um construtor que tem multi argumentos (...) que funciona bem no Windows, como sempre, sob linux ele compila bem, mas recusa-se a ligação a ela.

Por que isso não funciona no Linux?

aqui é um exemplo:

class gcException
{
public:
    gcException()
    {
        //code here
    }

    gcException(uint32 errId, const char* format = NULL, ...)
    {
        //code here
    }
}


enum
{
    ERR_BADCURLHANDLE,
};

.

Editar

Então, quando eu chamá-lo assim:

if(!m_pCurlHandle)
    throw gcException(ERR_BADCURLHANDLE);

Eu recebo este erro de compilação:

error: no matching function for call to ‘gcException::gcException(gcException)’
candidates are: gcException::gcException(const gcException*)
                 gcException::gcException(gcException*)
                 gcException::gcException(gcException&)
Foi útil?

Solução

Ele compila e liga muito bem. I expandiu seu código de teste para um "programa" completo:

class gcException {
    public:
        gcException() { }
        gcException(int errId, const char* format, ...) { }
};
int main() { new gcException(1, "foo", "bar", "baz"); }

e correu então g++ -Wall test.cpp sem erros. De acordo com g++ -v, tenho gcc versão 4.3.2 (Debian 4.3.2-1.1). O meu exemplo rápido de compilação para você?

(Você talvez acidentalmente compilar - ou link -? Com ??gcc em vez de g ++)

Outras dicas

O problema é que o construtor de cópia não aceita a temporária que você dê o lance. É uma temporária e, portanto, um rvalue. Uma referência-a-nonconst, nomeadamente gcException& não pode ligar-se a ele. Leia aqui nos detalhes.

Como um comentário sobre esta resposta sugere, o compilador Microsoft tinha um bug que tornava ligar referências que apontam para objetos não-const aceitar rvalues. Você deve mudar a sua cópia-construtor para isso:

gcException(gcException const& other) {
    // ...
}

Para torná-lo trabalho. Ele diz que o bug foi corrigido no Visual C ++ 2005. Portanto, você teria o mesmo problema com essa versão em diante. Então é melhor corrigir esse problema de imediato.

Bem, só percebi isso, parece bloco de código estava usando gcc, em vez de g ++ para compilar o arquivo.

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