Frage

Ich schreibe derzeit ein Basisprogramm zur Auswertung mathematischer Ausdrücke, das ich später in der genetischen Programmierung verwenden werde, um die beste Lösung für ein System von Ausdrücken zu ermitteln.Mein Compiler beschwert sich ständig, aber ich bin mir fast sicher, dass ich alles richtig gemacht habe.

Der Fehler:

C:\Users\Baelic Edeyn\Desktop\Project\Equation\Shunting yard\Better>make  
g++ -g -c Shunt.cpp  
g++ -g -c main.cpp  
main.cpp: In function 'int main()':  
main.cpp:18:19: error: 'shuntingYard' was not declared in this scope  
make: *** [main.o] Error 1

Mein Makefile:

main: Shunt.o main.o  
    g++ -g Shunt.o main.o -o main  
main.o:main.cpp  
    g++ -g -c main.cpp  
Shunt.o:Shunt.cpp  
    g++ -g -c Shunt.cpp

Mein Haupt:

#include "Shunt.h"
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string expr = "3+ 47 *2/(1-5)^2^3";
    string expr1 = "a+b";
    string expr2 = "(a+b)";
    string expr3 = "a+b*!3";
    string expr4 = "(a+b)*!3";

    cout << "expression" << "   " << "postfix" << endl;
    cout << expr << "   ";
    shuntingYard(expr);
    cout << expr << endl;
    cout << expr1 << "      ";
    ...
    return 0;

}

Meine Header-Datei:

#ifndef SHUNT_H
#define SHUNT_H

#include <string>

using namespace std;

class Shunt
{
    public:
        int precedence(char);
        void shuntingYard(string &expr);
        bool isFunction(string);
        bool isOperator(char);
        bool isLeftAssociative(char);
        bool isNum(char);

    private:    

};

#endif

Meine Implementierungsdatei:

#include "Shunt.h"

using namespace std;

void Shunt::shuntingYard(string &expr)
{
    ...
}

Bitte helfen Sie mir, ich bin kurz davor, meinen Laptop gegen die Wand zu schmeißen.

War es hilfreich?

Lösung

shuntingYard() ist ein Nicht-static Mitgliedsfunktion:Sie benötigen eine Instanz von Shunt wo man es aufrufen kann:

Shunt s;
s.shuntingYard(expr);

Eine Alternative besteht darin, die Memberfunktion zu übernehmen static wofür keine Instanz von erforderlich ist Shunt und kann aufgerufen werden:

Shunt::shuntingYard();

Vorausgesetzt, Sie halten es für möglich, sich darauf zu berufen shuntingYard() ohne dass eine Instanz es schafft static scheint die angemessenere Maßnahme zu sein.Oder wenn Shunt Wird verwendet, um lose verwandte Funktionen zu speichern, die keinen gemeinsamen Status haben und nicht die Merkmale einer bestimmten Abstraktion darstellen. Möglicherweise ist die Verwendung eines Namespace anstelle einer Klasse angemessener.

Andere Tipps

shuntingYard ist keine freie Funktion, sondern eine Mitgliedsfunktion.Sie müssen es von einer Instanz der Klasse anrufen:

generasacodicetagpre.

Sie können es zu einem static-Mitglied der Klasse machen und anrufen als:

generasacodicetagpre.

Das liegt daran, dass Sie sie wie eine reguläre Funktion aufrufen, obwohl es sich tatsächlich um eine Mitgliedsfunktion handelt und Sie daher eine Instanz von benötigen Shunt es anzurufen.

Main weiß nicht was shuntingYard(expr) Ist.Sie müssen ein Objekt vom Typ erstellen Shunt bevor Sie anrufen shuntingYard(expr); auf diesem Objekt.

Du hast erklärt shuntingYard als Mitgliedsfunktion eines Objekts, aber Sie versuchen, es so aufzurufen, als wäre es eine freie Funktion.

Sie müssen ein neues erstellen Shunt Klasse:

Shunt my_shunt;
my_shunt.shuntingYard(expr);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top