有关假定未声明函数的 C++ 编译器错误
-
12-12-2019 - |
题
我目前正在编写一个基本程序来评估数学表达式,然后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎确信我已经做对了。
错误:
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);
.
您可以使其成为类的生成古代代码成员,并称之为:
Shunt::shuntingYard(expr);
. 这是因为您像常规函数一样调用它,而实际上它是一个成员函数,因此您需要一个实例 Shunt
调用它。
main不知道属于属植物替代码代码。在调用该对象上的shuntingYard(expr)
之前,您必须创建类型生成的对象。
你已经声明了 shuntingYard
作为对象的成员函数,但您试图像调用自由函数一样调用它。
您需要创建一个新的 Shunt
班级:
Shunt my_shunt;
my_shunt.shuntingYard(expr);
不隶属于 StackOverflow