C++有关假定未声明函数的编译器错误
C++ compiler error concerning a supposedly undeclared function
我目前正在编写一个基本程序来评估数学表达式,然后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎可以肯定我做对了一切。
错误:
C:UsersBaelic EdeynDesktopProjectEquationShunting yardBetter>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
实例来调用它。
Main 不知道shuntingYard(expr)
是什么。必须先创建 Shunt
类型的对象,然后才能对该对象调用 shuntingYard(expr);
。
您已将shuntingYard
声明为对象的成员函数,但您尝试将其调用为自由函数。
您需要创建一个新的Shunt
类:
Shunt my_shunt;
my_shunt.shuntingYard(expr);
相关文章:
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- 编译器如何区分std::vector的构造函数
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 填充上编译器生成的复制构造函数之间的不一致
- 编译器找不到'aligned_alloc'函数
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 为什么编译器将其解析为函数指针而不是递归调用?
- 表达式未评估为常数两个级别的constexpr函数(编译器错误?)
- 从 std::streambif 继承时不兼容析构函数编译器警告
- 在构造函数 - 编译器错误中调用的成员变量的驱动器
- 复制初始化和显式构造函数-编译器的差异
- 静态函数编译器优化C++
- 为什么派生类虚函数可以调用基类虚函数?编译器如何实现
- 复制构造函数 - 编译器错误 C2040 和 C2440
- 带有模板返回类型的虚基函数:编译器在使用pointtype作为模板参数的派生类时失败(MSVC 2013)
- C++中虚拟函数编译器的作用