Pergunta

Ok,

Aqui está o que eu estou tentando fazer ... Agora ele está compilando, mas falhando na liga ... LNK2001

Eu quero a estática métodos porque não existem variáveis ??de membro, no entanto eu também quero-los em linha para os aumentos de velocidade que eles fornecem.

Qual é a melhor maneira de fazer isso? Aqui está o que eu tenho em poucas palavras:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

Eu estou tentando fazer isso porque eu quero ser capaz de ir:

foo::bar(myFloatPtr);

foo não tem nenhum membro variáveis ??... não faz sentido.

Foi útil?

Solução

Se você está chamando bar de outro arquivo CPP, que não foo.cpp, ele precisa estar em um arquivo de cabeçalho.

Outras dicas

Em primeiro lugar, gostaria de colocá-los em um namespace em vez disso, porque não há lógica em tudo em que "class". Segundo, você pode definir o corpo funções no cabeçalho do arquivo diretamente para permitir que o compilador para vê-los. Caso contrário, você precisa whole program optimization a ser feito pelo vinculador para inlining essas funções (AFAIK).

Você deve definir a sua função inline no cabeçalho do arquivo, não um arquivo de implementação separada. As definições são necessárias quando o arquivo de cabeçalho é #included, se eles são a esperança de ser embutido, depois de tudo.

A falha do link que você está vendo é porque a declaração (no cabeçalho do arquivo) não informar o compilador que o método é ser em linha, ao passo que a implementação está em linha, por isso não disponível para vinculação.

funções Geralmente inline-capazes são implementadas onde eles são declarados (no arquivo de cabeçalho). O compilador é livre para funções inline como você tê-los, mas você não pode força -lo a qualquer coisa em linha. Se você estiver usando Visual C ++, permitem "inline qualquer adequado", "geração de código link-time" e "favorecer o código rápido".

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