ERRO C ++ Uma referência não estática de membro deve ser relativa a um objeto específico

ERRO C ++ Uma referência não estática de membro deve ser relativa a um objeto específico
Hoje, discutiremos um erro que pode ocorrer devido à falta de prática por um programador quando eles misturam o conceito de funções estáticas e não estáticas. Vamos primeiro estudar funções de membro não estático. Estes são o tipo de funções declaradas na área de especificação de membro de qualquer classe sem qualquer especificador estático. Para os membros não estáticos, existe um método especial para a declaração. Em C ++, se precisarmos chamar qualquer função de qualquer classe, podemos chamá -la criando um objeto. Se for o membro estático, será chamado pelos dois colonos “::” entre a classe e o nome da função como class_name :: func_name. Se for a função não estática, o uso disso dará um erro que é “erro que uma referência não estática de membro deve ser relativa a um objeto específico”.

Às vezes, torna-se agitado enfrentar esse tipo de erro quando os novos programadores estão usando uma função não estática. Mas uma vez que eles se familiarizam com isso, fica fácil resolver esses erros. Para resolver este erro, existem dois métodos. O primeiro é alterar a função para a função estática e chamá -la simplesmente usando o método de chamada "class_name :: function_name". Ou o segundo método, ou seja, temos que criar um objeto dessa classe e depois usar o nome do objeto, podemos chamar a função pela função chamada “Class_Object.function_name ”.

Sintaxe:

Não há sintaxe especificada para este erro, porque não faz parte do código, é o erro de compilação que pode ocorrer devido a bugs no código.

Erro: não é possível chamar a função de membro de 'função' sem objeto

O acima mostrado é uma imagem de como é o erro.

Exemplo # 01:

Agora, estaremos realizando um exemplo para verificar como esse erro é causado e como resolver esse tipo de erro. Antes de mudar para o nosso código principal, onde o erro ocorre, primeiro incluiremos o arquivo de cabeçalho "iostream" que é usado para nos permitir realizar operações de E/S. Depois disso, criamos um objeto de classe chamado "my_object". Dentro desta classe, declaramos um membro estático chamado "Display ()" e também uma função de membro não estática "SHOW ()".

Fora da aula, chamamos as duas funções usando a classe de "my_object". Dentro da função de membro Display (), imprimimos a mensagem de execução para o método Display (). E no método show (), instruímos o compilador a imprimir a mensagem de execução para o método show (). Em direção à nossa principal função, onde chamaremos as duas funções usando o método de chamada de membro estático, que é o nome da classe e depois os dois dois pontos junto com o nome do método. No nosso caso, parece "my_object :: Display ();". Chamamos a função Show () e retornamos o valor nulo, agora executaremos o código.

#incluir
usando namespace std;
classe my_object
público:
visor de vazio estático ();
show void ();
;
void my_object :: Display ()
cout << "display() method executed" << endl;

void my_object :: show ()
cout << "Show() method executed" << endl;

int main ()
my_object :: Display ();
my_object :: show ();
retornar 0;

Depois de executar nosso código, encontramos este erro exibido na linha "21", onde chamamos nosso método "show ()". O erro encontrado é devido à chamada de função porque é um membro não estático e nós o chamamos usando o método de chamada de membro estático. Agora vamos resolver esse erro usando a maneira precisa de chamar a função não estática.

Como mostrado no trecho abaixo, substituímos a chamada de função pela correta, criando primeiro um objeto para essa classe. Em seguida, usando este objeto, chamamos a função por referência a esse objeto "Obj". Agora, executamos o código novamente.

Depois de executar o código novamente, exibimos com sucesso as mensagens de ambas as funções, como podemos ver na figura abaixo desta vez, nenhum erro foi exibido.

Exemplo # 02:

Agora, implementaremos outro exemplo no qual criaremos uma função não estática na qual realizaremos um cálculo. Depois de incluir nosso arquivo de cabeçalho, criaremos uma classe chamada "MyClass" na qual declaramos um membro estático chamado "my_func ()" e um membro não estático "add ()". Fora dessa aula, chamamos as duas funções. Na função add (), executaremos a adição de duas variáveis ​​inteiras "A" e "B" à qual atribuímos os valores "2" e "3" e os armazenam em uma variável inteira "C". No final, usando a declaração "cout", imprimiremos a soma de ambos os valores. Na segunda função my_func (), simplesmente exibiremos a mensagem de qual função ela é exibida. Agora, mergulhando em nossa função principal em que usando a chamada do método estático, chamaremos as duas funções. Depois de chamar esses métodos, executaremos o código.

#incluir
usando namespace std;
classe myclass

público:
estático int my_func ();
void add ();
;
void myclass :: add ()

int a = 2, b = 3;
int c = a+b;
std :: cout <<"the sum of a and b is: "<< c << std::endl;

int myclass :: my_func ()

std :: cout << "this is my_func() method" << std::endl;
retornar 0;

int main ()
myclass :: my_func ();
myClass :: add ();

Abaixo está a mensagem de erro exibida em nossa parte de saída, que indica que há uma chamada de função errada na linha 22 para o método myclass :: add () que foi chamado sem criar um objeto para essa classe. Como discutimos acima, não podemos chamar um membro não estático sem criar um objeto. Agora vamos tentar resolver este erro.

Na figura dada, escrevemos a maneira correta de chamar um membro não estático. Primeiro criamos um objeto para a classe da qual a função será chamada. Declaramos o objeto "obj" por "myclass" com a referência de que chamaremos isso de função. Depois de criar o objeto, chamamos a função usando a função chamada “Obj.add () ”e depois execute o código.

Após a execução do código, calculamos com sucesso a adição das variáveis ​​que realizamos no método "add ()" e exibimos o resultado usando a variável "C" que está mantendo o valor de retorno da adição.

Conclusão

Neste guia, estudamos o erro de tempo de compilação que ocorre principalmente devido à chamada de função da função não estática. Este erro ocorre principalmente devido ao equívoco do codificador sobre os membros não estáticos. Explicamos a maneira de resolver esses erros implementando vários exemplos.