문제

나는 현재 수학적 표현을 평가하기 위한 기본 프로그램을 작성 중이며 나중에 유전 프로그래밍에서 표현 시스템에 대한 최상의 솔루션을 결정하는 데 사용할 것입니다.내 컴파일러는 계속 불평하지만 모든 것이 올바르게 이루어졌다고 거의 확신합니다.

오류:

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

내 메이크파일:

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

내 주요:

#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;

}

내 헤더 파일:

#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

내 구현 파일:

#include "Shunt.h"

using namespace std;

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

도와주세요. 노트북을 벽에 던질 위기에 처해 있습니다.

도움이 되었습니까?

해결책

shuntingYard()static 회원 기능:당신은 인스턴스가 필요합니다 Shunt 그것을 호출할 대상:

Shunt s;
s.shuntingYard(expr);

대안은 멤버 함수를 만드는 것입니다. static 인스턴스가 필요하지 않은 Shunt 호출될 수 있습니다:

Shunt::shuntingYard();

귀하가 호출이 가능하다고 판단한 경우 shuntingYard() 인스턴스를 만들지 않고 static 더 적절한 조치인 것 같습니다.아니면 만약에 Shunt 상태를 공유하지 않고 특정 추상화의 기능을 나타내지 않는 느슨하게 관련된 함수를 보유하는 데 사용되는 경우 클래스 대신 네임스페이스를 사용하는 것이 더 적절할 수 있습니다.

다른 팁

shuntingYard는 자유 기능이 아니라 멤버 함수입니다.클래스의 인스턴스에서 호출해야합니다.

Shunt s;
s.shuntingYard(expr);
.

클래스의 static 멤버를 만들고 다음과 같이 호출 할 수 있습니다.

Shunt::shuntingYard(expr);
.

실제로 멤버 함수 일 때 정기적 인 함수처럼 호출하고 있기 때문이므로 Shunt의 인스턴스가 필요합니다.

메인은 shuntingYard(expr)가 무엇인지 모릅니다.해당 개체에서 Shunt를 호출하기 전에 shuntingYard(expr); 유형의 객체를 만들어야합니다.

객체의 멤버 함수로 shuntingYard를 선언했지만 자유 기능이있는 것처럼 호출하려고 시도합니다.

Shunt 클래스를 만들어야합니다.

Shunt my_shunt;
my_shunt.shuntingYard(expr);
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top