Błąd C ++ Niestatyczne odniesienie do członka musi być względne dla określonego obiektu

Błąd C ++ Niestatyczne odniesienie do członka musi być względne dla określonego obiektu
Dzisiaj omówimy błąd, który może wystąpić z powodu braku praktyki przez programistę, gdy mieszają koncepcję funkcji statycznych i nietatycznych. Najpierw przestudimy nietatyczne funkcje członków. Są to rodzaj funkcji zadeklarowanych w obszarze specyfikacji członka dowolnej klasy bez żadnego statycznego specyfikatora. Dla członków nietatycznych istnieje specjalna metoda deklaracji. W C ++, jeśli musimy wywołać dowolną funkcję z dowolnej klasy, możemy ją wywołać, tworząc obiekt. Jeśli jest to członek statyczny, to zostanie wywołane przez podwójne kolony „::” między klasą a nazwą funkcji taką jak klasa_nazwa :: FUNC_NAME. Jeśli jest to funkcja nietatyczna, użycie tego spowoduje błąd, który jest „błędem, które odniesienie do członka nietatyczne musi być względne do określonego obiektu”.

Czasami staje się gorączkowym rozwiązaniem tego rodzaju błędów, gdy nowi programiści używają funkcji niestatycznej. Ale kiedy się z tym zapoznają, łatwo jest rozwiązać te błędy. Aby rozwiązać ten błąd, istnieją dwie metody. Pierwszym z nich jest zmiana funkcji na funkcję statyczną i wywołanie jej po prostu za pomocą metody wywołania „klasa_name :: funkcja”. Lub druga metoda, to znaczy musimy utworzyć obiekt tej klasy, a następnie używając nazwy obiektu, możemy wywołać funkcję o nazwie „class_object.Funkcja_nazwa ”.

Składnia:

Nie ma określonej składni dla tego błędu, ponieważ nie jest to część kodu. Jest to błąd czasu kompilacji, który może wystąpić z powodu błędów w kodzie.

Błąd: nie może wywołać funkcji członka „funkcja” bez obiektu

Powyższe wyświetlane jest obraz tego, jak wygląda błąd.

Przykład nr 01:

Teraz będziemy wykonywać przykład, aby sprawdzić, w jaki sposób ten błąd jest spowodowany i jak rozwiązać ten typ błędu. Przed przejściem do naszego głównego kodu, w którym występuje błąd, najpierw dołączymy plik nagłówka „iostream”, który służy nam, aby umożliwić nam wykonywanie operacji we/wy. Następnie utworzyliśmy obiekt klasy o nazwie „My_Object”. W tej klasie zadeklarowaliśmy statyczny członek o nazwie „Display ()”, a także nietatyczna funkcja członka „show ()”.

Poza klasą nazywaliśmy obie funkcje za pomocą klasy „MY_OBject”. Wewnątrz funkcji członka display () wydrukowaliśmy wiadomość wykonania dla metody display (). W metodzie show () poinstruowaliśmy kompilator do wydrukowania komunikatu wykonania dla metody show (). Kierując się w kierunku naszej głównej funkcji, w której wywołamy obie funkcje za pomocą statycznej metody wywoływania członka, która jest nazwą klasy, a następnie podwójne kolony wraz z nazwą metody. W naszym przypadku wygląda to jak „my_object :: display ();”. Nazwaliśmy naszą funkcję show () i zwróciliśmy wartość zerową, teraz wykonamy kod.

#włączać
za pomocą przestrzeni nazw Std;
klasa my_object
publiczny:
static void display ();
void show ();
;
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 ();
powrót 0;

Po wykonaniu naszego kodu napotkaliśmy ten błąd wyświetlany w linii „21”, w którym nazwaliśmy naszą metodę „show ()”. Napotkany błąd wynika z wywołania funkcji, ponieważ jest on członkiem nietatycznym i nazwaliśmy go za pomocą statycznej metody wywołania członka. Teraz rozwiązamy ten błąd za pomocą dokładnego sposobu wywołania funkcji nietatycznej.

Jak pokazano na fragmencie poniżej, zastąpiliśmy wywołanie funkcji poprawną. Następnie, używając tego obiektu, wywołaliśmy funkcję przez odniesienie do tego obiektu „OBJ”. Teraz ponownie wykonujemy kod.

Po ponownym wykonaniu kodu z powodzeniem wyświetliśmy komunikaty obu funkcji, jak widać na poniższym rysunku tym razem.

Przykład nr 02:

Teraz zaimplementujemy kolejny przykład, w którym utworzymy nietatyczną funkcję, w której wykonamy obliczenia. Po uwzględnieniu naszego pliku nagłówka utworzymy klasę o nazwie „MyClass”, w której zadeklarowaliśmy statyczny członek o nazwie „my_func ()” i nietatyczny członek „Add ()”. Poza tą klasą nazywaliśmy obie funkcje. W funkcji add () wykonamy dodanie dwóch zmiennych liczb całkowitych „A” i „B”, do których przypisaliśmy wartości „2” i „3” i przechowujemy je w zmiennej liczbowej „C”. Na końcu, za pomocą instrukcji „Cout”, wydrukujemy sumę obu wartości. W drugiej funkcji my_func () po prostu wyświetlimy wiadomość, z której funkcji jest wyświetlana. Teraz, nurkując w naszej głównej funkcji, w której za pomocą wywołania metody statycznej wywołamy obie funkcje. Po wywołaniu tych metod wykonamy kod.

#włączać
za pomocą przestrzeni nazw Std;
klasa myclass

publiczny:
static 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;
powrót 0;

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

Poniżej znajduje się komunikat o błędzie wyświetlany w naszej części wyjściowej, która wskazuje, że istnieje niewłaściwe wywołanie funkcji w linii 22 dla metody MyClass :: add (), która została wywołana bez tworzenia obiektu dla tej klasy. Jak omówiliśmy powyżej, nie możemy wywołać członka nietatycznego bez tworzenia obiektu. Teraz spróbujemy rozwiązać ten błąd.

Na danej figurze napisaliśmy właściwy sposób wywołania niestatycznego członka. Najpierw stworzyliśmy obiekt dla klasy, której funkcja zostanie wywołana. Zadeklarowaliśmy obiekt „OBJ” dla „MyClass” z odniesieniem do którego wywołamy tę funkcję. Po utworzeniu obiektu wywołaliśmy funkcję za pomocą funkcji o nazwie „OBJ.Dodaj () ”, a następnie wykonaj kod.

Po wykonaniu kodu z powodzeniem obliczyliśmy dodanie zmiennych, które wykonaliśmy w metodzie „add ()” i wyświetliśmy wynik za pomocą zmiennej „C”, która utrzymuje wartość zwracaną dodania.

Wniosek

W tym przewodniku zbadaliśmy błąd czasu kompilacji, który występuje w większości z powodu wywołania funkcji funkcji członka nietatycznego. Ten błąd występuje głównie z powodu błędnego przekonania kodera na temat członków nietatycznych. Wyjaśniliśmy sposób rozwiązania tych błędów poprzez wdrożenie wielu przykładów.