C++ ein nicht statischer memberverweis muss relativ zu einem bestimmten objekt sein.

C++ ein nicht statischer memberverweis muss relativ zu einem bestimmten objekt sein.

  • xPain
  • 23. März 2021
  • Geschlossen
  • Erledigt

In diesem Bereich sind Themen vom Themenersteller als erledigt zu markieren, wenn die Frage beantwortet oder das Problem gelöst wurde. Das Thema wird daraufhin automatisch geschlossen.
Klicke hierzu auf "Thema bearbeiten > Als erledigt markieren".

    • #1

    Hallo,
    ich würde gerne für das Leader/Co-Leader System abfragen, ob der Spieler ein GM ist oder nicht. Wenn GM = kein Leader/Co-Leader dranhängen.

    Ich habs so:

    1. if (!CInstanceBase::IsGameMaster())
    2.     if (dwNewIsGuildName == 3)
    3.         strGuildName.insert(0, "[Leader] - ");
    4.     else if (dwNewIsGuildName == 2)
    5.         strGuildName.insert(0, "[CoLeader] - ");

    Er sagt aber "Ein nicht statischer Memberverweis muss relativ zu einem bestimmten Objekt sein.", also beim

    1. if (!CInstanceBase::IsGameMaster())

    Woran liegt das bzw. wie bekomme ich das richtig hin?

  • Moderator 24. März 2021

    Hat das Thema geschlossen

  • Dieses Thema enthält 3 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

  • Foren
  • Virtual World
  • Programmierung

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

[C++] Unzulässiger Aufruf einer nicht statischen Memberfunktion (gelöst)

  • Ersteller TooR
  • Erstellt am 21 April 2008

  • #1

Hallo, bin mal wieder an einer kleinen Übungsaufgabe zu C++.

Es geht dabei um die Berechnung von komplexen Zahlen. Dies ist für mein Problem nebensächlich.

Ich bin gerade am Anfang und will testen ob mein Standartkonstruktor funktioniert.

Dazu will ich ihn erzeugen und danach mit print() ausgeben lassen.

Dabei liefert mit Visual Studio 08 folgenden Fehler: Unzulässiger Aufruf einer nicht statischen Memberfunktion (Main.cpp Zeile: 1

C++ ein nicht statischer memberverweis muss relativ zu einem bestimmten objekt sein.

Main.cpp

#include <iostream> #include "Complex.h" using namespace std; /*@aurhor: Dominic * Test der Implementierung: complex */ int main(int argc, char* argv[]){ cout << "c1"; //Ruft Standartkonstruktor auf Complex::Complex(); //Ruft die Printmethode auf, //hier entsetht der Fehler (in VS 08 C2352) Complex::print(); return 0; }


Complex.h

#include <iostream> #include "Complex.h" #include <math.h> using namespace std; Complex::Complex(int realP, int imagP){ this->realPart = realP; this->imagPart = imagP; } void Complex::setImag(int imagP){ this->imagPart = imagP; } void Complex::setReal(int realP){ this->realPart = realP; } int Complex::getImag(){ return this->imagPart; } int Complex::getReal(){ return this->realPart; } double Complex::absolutValue(){ return (sqrt((double)(getReal() * getReal()) +(double)(getImag() * getImag()))); } } void Complex::print(){ cout << getReal() << " + i " << getImag(); }


complex.h

#ifndef __Complex__ #define __Complex__ class Complex { public: Complex add(Complex op); double absolutValue(); int getReal(); int getImag(); void setReal(int realP); void setImag(int imagP); //Standartkonstruktor Complex(){ realPart = 0; imagPart = 0; } Complex(int realP, int imagP); void print(); private: int realPart; int imagPart; }; #endif


Ich hoffe mir kann jemand den Fehler erklären den ich hier mache.
MFG

Zuletzt bearbeitet: 21 April 2008

C++ ein nicht statischer memberverweis muss relativ zu einem bestimmten objekt sein.

  • #2

Sowie ich das sehe (CPP schon einige Jahre eingerostet), rufst du in Zeile 18 die Methode aus einem statischen Kontext aus.

Du müstest sowas machen wie

Complex c;
c = new Complex();
c->print();

Nagel mich jetzt nicht auf die genaue Syntax fest, aber ich meine so müsste es gehen...

Zuletzt bearbeitet: 21 April 2008

C++ ein nicht statischer memberverweis muss relativ zu einem bestimmten objekt sein.

theHacker

sieht vor lauter Ads den Content nicht mehr

20 April 200622.6521.287

  • #3

Der Konstruktor wird automatisch ausgeführt.

Einfach nur

Complex c; // deklarieren, initialisieren, triggert Konstruktor c.print();

Alternativ:

Complex* c; // nur deklarieren, kein Speicher reserviert ! // c->print(); // führt zum SIGSEGV c = new Complex(); // Speicher holen, Konstruktor aufrufen c->print(); delete c; // freigeben

Zuletzt bearbeitet: 21 April 2008

  • #4

Manchmal ist es doch zu simpel um es zu glauben.
Hier mal der Ausschnitt, der Main.cpp, welche zur Lösung geführt hat:

//Ruft Standartkonstruktor auf Complex c; //Ruft die Printmethode auf c.print();


Vielen dank für die Hilfe

Zuletzt bearbeitet: 21 April 2008

  • Foren
  • Virtual World
  • Programmierung