尝试编译二叉树程序时出错

error when trying to compile binary tree program

本文关键字:出错 程序 二叉树 编译      更新时间:2023-10-16

所以在这个项目中,我必须开发一个二叉表达式树,并使用该树将后缀表达式转换为中缀表达式。在大多数情况下,一切看起来都不错(除了我尚未完成的一两个功能)。但是我在尝试编译它时遇到错误。唯一的问题是,它并没有真正告诉我问题是什么。这是我尝试编译它时遇到的问题:

g++ -o bet.x bet.cpp/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../lib64/crt1.o:在函数"_start"中:(.text+0x20):对"main"的未定义引用

收集2:LD 返回 1 个退出状态

制造: *** [bet.x] 错误 1

我不知道这意味着什么。但以防万一这是我的 3 个文件。从我的制作文件开始:

bet.x: bet.cpp
    g++ -o bet.x bet.cpp
clean:
    rm -f *.o *.x core.*

这是我的 bet.h(头文件),它保存我的接口:

#include <string>
using namespace std;
struct BinaryNode
{
  string element;
  BinaryNode* leftNode;
  BinaryNode* rightNode;
};
class BET
{
public:
  BET();
  BET(const string postfix);
  BET(const BET&);
  ~BET();
  bool buildFromPostfix(const string postfix);
  const BET& operator= (const BET&);
  void printInfixExpression();
  void printPostfixExpression();
  size_t size();
  size_t leaf_nodes();
  bool empty();

private:
  void printInfixExpression(BinaryNode *n);
  void makeEmpty(BinaryNode* &t);
  BinaryNode* clone(BinaryNode* t) const;
  BinaryNode* headNode;
  void printPostfixExpression(BinaryNode *n);
  size_t size(BinaryNode *t);
  size_t leaf_nodes(BinaryNode *t);
};
向您展示

我的整个赌注.cpp包含我所有实现的文件可能太多了。但这里有一些。如果需要更多,请发表评论:

BET::BET()
{
    headNode = NULL;
}
BET::BET(const string postfix)
{
    headNode = NULL;
    buildFromPostfix(postfix);
}
BET::BET(const BET& t)
{
    headNode = clone(t.headNode);
}
BET::~BET()
{
    makeEmpty(headNode);
}
//2 functions i made myself for high/low precedence 
bool isHighPrec(const string& op)
{
    return op == "*" || op == "/";
}
bool isLowPrec(const string& op)
{
    return op == "+" || op == "-";
}
//returns false for errors, returns true otherwise
bool BET::buildFromPostfix(const string postfix){
    stack<BinaryNode*> opTree;
    istringstream istr(postfix);
    string op;
    makeEmpty(headNode);
    while(istr >> op)
    {
            if(isHighPrec(op) || isLowPrec(op))
            {
                    if(opTree.size() < 2)
                    {
                            cout << "Error -- invalid postfix expression!n";
                            while(opTree.size())
                            {
                                    makeEmpty(opTree.top());
                                    opTree.pop();
                            }
                            return false;
                    }
                    else
                    {
                            BinaryNode* bn = new BinaryNode();
                            bn->element = op;
                            bn->rightNode = opTree.top();
                            opTree.pop();
                            bn->leftNode = opTree.top();
                            opTree.pop();
                            opTree.push(bn);
                    }
            }
            else
            {
                    BinaryNode* bn = new BinaryNode();
                    bn->element = op;
                    bn->rightNode = NULL;
                    bn->leftNode = NULL;
                    opTree.push(bn);
            }
    }
    if(opTree.size() != 1)
    {
            cout << "Error -- invalid postfix expression!n";
            while(opTree.size())
            {
                    makeEmpty(opTree.top());
                    opTree.pop();
            }
            return false;
    }
    else
    {
            headNode = opTree.top();
            opTree.pop();
    }
return true;
}

这意味着您正在尝试编译一个未定义main函数的可执行程序。程序不知道首先运行哪个函数。

要解决此问题,您需要在源代码的全局上下文中的某个位置添加int main(){ //body return 0; }

以下命令:

g++ -o bet.x bet.cpp说从单个文件制作一个名为bet.x的可执行文件:bet.cpp

但是,要制作可执行文件,您需要一个缺少的main()函数。

如果你只是想确保语法正常,你可以通过-c传递给g++来构建一个对象文件

另一种选择是添加一个main()函数,甚至可以编写一些测试来检查代码是否正常工作。