Pergunta

função Non linha definida no arquivo de cabeçalho com guardas

#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H 
void foo()
{
//something
}
#endif

Resulta em erro vinculador: Já definido no someother.obj arquivo Fazendo a função inline funciona bem, mas eu não sou capaz de entender por que a função já está erroring em primeiro caso.

Foi útil?

Solução

Se o cabeçalho está incluído em mais de um arquivo de origem e a função não está marcado como "inline" você terá mais de uma definição. A incluem guardas só evitar múltiplas inclusões no mesmo arquivo fonte.

Outras dicas

Você está violando a definição da regra . Se você quiser definir uma função diretamente no cabeçalho, você deve marcá-lo como inline - que permitirá que a função a ser definida várias vezes. Observe também que inline não tem outro significado, particularmente ele não forçar o compilador para chamadas em linha (ao contrário da crença popular).

Uma vez que não está em linha, cada unidade de tradução terá sua própria cópia da função resultando na função que está sendo definido várias vezes.

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