C++ C++;关于假定未声明函数的编译器错误

C++ C++;关于假定未声明函数的编译器错误,c++,compiler-errors,shunting-yard,C++,Compiler Errors,Shunting Yard,我目前正在编写一个计算数学表达式的基本程序,稍后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎可以肯定我把一切都做好了 错误: 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

我目前正在编写一个计算数学表达式的基本程序,稍后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎可以肯定我把一切都做好了

错误:

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;
请帮帮我,我快要把我的笔记本电脑扔到墙上了。

ShutchingYard()
是一个非静态的成员函数:您需要一个
Shutch
的实例来调用它:

Shunt s;
s.shuntingYard(expr);
另一种方法是使成员函数
静态
,它不需要
分流
的实例,并且可以调用:

Shunt::shuntingYard();

考虑到您认为可以调用
调车场()
,而无需实例,使其
成为静态的
似乎是更合适的操作。或如果使用分流来保存不共享状态且不表示特定抽象特性的松散相关函数,则使用名称空间而不是类可能更合适。

这是因为当它实际上是一个成员函数时,您像调用常规函数一样调用它,因此您需要一个调用它的
分流
实例。

分流场
不是自由函数,而是成员函数。您需要从类的实例调用它:

Shunt s;
s.shuntingYard(expr);
您可以将其设置为类的
静态
成员,并将其称为:

Shunt::shuntingYard(expr);

您已将
调车场
声明为对象的成员函数,但您试图调用它,就像调用自由函数一样

您需要创建一个新的
分流
类:

Shunt my_shunt;
my_shunt.shuntingYard(expr);

梅因不知道什么是
调车场(expr)
。在调用
调车场(expr)之前,必须创建一个类型为
调车
的对象在那个物体上。

那个应该是
我的分流站(expr) As>代码> MyObRe分流不是指针。C++编译器错误涉及一个可能未声明的函数…当与编译器意见不一致时,我建议您采取谦虚的态度,并假设它是正确的(在本例中,函数是未声明的)。我并不是说编译器没有bug,但问题的根源可能就在键盘和椅子之间。谢谢你快速回复!!在名称空间而不是类中使用它已经产生了奇迹!!
Shunt::shuntingYard(expr);
Shunt my_shunt;
my_shunt.shuntingYard(expr);