Como corrigir o erro com várias definições de uma função em C ++

Como corrigir o erro com várias definições de uma função em C ++
Em C ++, o erro de definição múltipla ocorre quando uma função ou variável possui várias definições em diferentes arquivos de origem, causando erros durante o processo de vinculação. Este guia fornece uma compreensão da causa desse erro e oferece soluções para corrigi -lo.

Erro de definição múltipla em C++

Quando uma função ou variável tem várias definições em vários arquivos de origem, o procedimento de vinculação resulta em um erro de definição múltipla. Para garantir a uniformidade e a precisão do programa, o vinculador espera apenas uma definição em todos os arquivos de origem.

Normalmente, o erro se parece com o seguinte:

Erro: Definição múltipla de 'function_name'

É crucial para cada desenvolvedor de C ++ compreender a causa desse erro e saber como consertá -lo.

Fatores que levam a vários erros de definição em C++

Múltiplos erros de definição podem acontecer no seu código C ++ por vários motivos, conforme discutido abaixo:

1: múltiplas definições da mesma função ou variável em um arquivo de origem

Se você definir acidentalmente a mesma função ou variável várias vezes no mesmo arquivo de origem, você encontrará um erro de definição múltipla.

2: função ou variável definida em um arquivo de cabeçalho

Quando uma função ou variável é declarada em um arquivo de cabeçalho e esse arquivo de cabeçalho é referenciado por vários arquivos de origem, qualquer arquivo de origem que possui um cabeçalho também conterá uma definição para a função ou variável. Isso gera o erro de várias definições.

3: declarando a mesma função ou variável várias vezes no mesmo arquivo de origem

Se você declarar acidentalmente a mesma função ou variável várias vezes no mesmo arquivo de origem, encontrará um erro de definição múltipla ao vincular. Isso ocorre porque o vinculador espera apenas uma definição para cada função ou variável em todos os arquivos de origem.

Corrija o erro com várias definições de uma função em C++

As seguintes técnicas podem ser usadas para corrigir vários erros de definição no C ++:

1: Utilize protótipos de função e variáveis ​​externas

Uma técnica para corrigir vários erros de definição em C ++ é declarar uma função ou variável usando protótipos de função ou variáveis ​​externas, em vez de especificá -las em um arquivo de cabeçalho. Ao fazer isso, a função ou variável será definida apenas uma vez no arquivo de origem, evitando assim o erro.

A seguir, é apresentada uma sintaxe de código para a solução acima.

// cabeçalho.h
#ifndef header_h
#Define header_h
extern int sub (int num1, int num2);
#fim se
// fonte.cpp
#include "cabeçalho.h "
int sub (int num1, int num2)

retornar num1 - num2;

Na sintaxe acima, a função sub é declarado no arquivo de cabeçalho usando a palavra -chave externa, o que indica que ela é definida em outro lugar. A definição real é então fornecida no arquivo de origem. O #ifndef header_h e #Define header_h As linhas incluem guardas que garantem que o arquivo de cabeçalho esteja incluído apenas uma vez no mesmo arquivo de origem para evitar redefinir a função.

2: Utilize funções estáticas ou variáveis

Se uma função ou variável for usada apenas em um arquivo de origem, declare -o como estático. Isso restringe seu escopo ao arquivo de origem atual, e o vinculador não o considerará durante a ligação. Ao fazer isso, você garante que a função ou variável seja definida apenas uma vez e não pode ser acessada de outros arquivos.

Declarar uma função ou variável como estática restringe seu escopo ao arquivo de origem atual e garante que ele seja definido apenas uma vez, tornando seu código mais modular e fácil de manter

Além disso, se você tiver várias funções em diferentes arquivos, poderá utilizá -los facilmente em qualquer outro projeto.

Considere a seguinte sintaxe de código como exemplo:

// funções.cpp
static int on -up_used_function ()

//…

Na sintaxe acima, a "estático" A palavra -chave é usada para definir uma função chamada “Antes_used_function”. Esta função só pode ser acessada dentro do mesmo arquivo de origem e não pode ser acessada de outros arquivos que estão vinculados a este arquivo de origem. Isso garante que a função seja definida apenas uma vez e não possa ser modificada ou acessada acidentalmente em outras partes do programa.

3: Implementar funções embutidas

Considere usar funções embutidas para frequentemente chamadas funções curtas. Isso eliminará a necessidade de uma definição separada, pois o compilador pode substituir a chamada de função pelo código da função diretamente.

Considere a seguinte sintaxe de código como exemplo:

// cabeçalho.h
Inline int sub (int num1, int num2)

retornar num1 - num2;

Na sintaxe acima, a palavra -chave "em linha" é usada para definir uma função chamada "sub", que leva dois argumentos inteiros e retorna sua diferença. Ao definir essa função como embutida, o compilador substituirá a chamada de função pelo código de função real no momento da compilação, eliminando a necessidade de uma definição de função separada.

4: Utilize namespaces

Usando namespaces, você pode impedir que o vinculador encontre várias definições com o mesmo nome. Os namespaces fornecem uma maneira de agrupar declarações e definições em um único escopo nomeado, facilitando a organização e o gerenciamento de grandes bases de código.

Considere a seguinte sintaxe de código como exemplo:

// fonte_code_1.cpp
namespace fonte_code_1

int sub (int num1, int num2)

retornar num1 - num2;


// fonte_code_2.cpp
namespace fonte_code_2

int sub (int num1, int num2)

retornar num1 - num2;

Na sintaxe acima, dois arquivos de origem diferentes têm uma função chamada "sub" com a mesma assinatura. Para evitar conflitos de nomeação, cada função é definida dentro de um espaço de nome separado: "fonte_code_1" e "fonte_code_2". Dessa forma, as funções podem ser acessadas em seus respectivos espaços para nome sem causar conflitos de nomeação. Ao chamar a função de outras partes da base de código, você precisaria especificar o espaço para nome para indicar qual versão da função você deseja chamar.

Conclusão

Quando programadores e desenvolvedores definem e usam a mesma função duas vezes, o sistema fica confuso, levando ao erro típico de múltiplas definições de funções C ++. Como o C ++ pode mostrar erros e defeitos inesperados em arquivos que parecem estar corretos, os desenvolvedores desfrutam de uma experiência dinâmica trabalhando com ele. Portanto, este guia explicou o erro de múltiplas definições de funções em C ++, forneceu a sintaxe da solução e depurou o erro.