尝试编译二叉树程序时出错
Posted
技术标签:
【中文标题】尝试编译二叉树程序时出错【英文标题】:error when trying to compile binary tree program 【发布时间】:2014-04-02 10:08:33 【问题描述】:所以在这个项目中,我必须开发一个二叉表达式树,并使用该树将后缀表达式转换为中缀表达式。大部分看起来都还不错,(除了我尚未完成的一两个功能)。但是我在尝试编译它时遇到了错误。唯一的问题是它并没有真正告诉我问题是什么。这是我尝试编译时遇到的问题:
g++ -o bet.x bet.cpp /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../lib64/crt1.o:在函数“_start”中: (.text+0x20): 对 `main' 的未定义引用
collect2: ld 返回 1 个退出状态
make: *** [bet.x] 错误 1
我不知道这意味着什么。但只是以防万一这是我的 3 个文件。从我的 makefile 开始:
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);
;
向您展示包含我所有实现的整个 bet.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;
【问题讨论】:
你说唯一的问题是它并没有真正告诉我问题是什么。但那是无效的。您粘贴了确切的错误:(.text+0x20): undefined reference to 'main'
-1 这可以通过简单的网络搜索来轻松解决您的错误消息。
What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复
【参考方案1】:
这意味着您正在尝试编译一个没有定义main
函数的可执行程序。
程序不知道先运行哪个函数。
要解决此问题,您需要在源代码的全局上下文中的某处添加 int main() //body return 0;
。
【讨论】:
谢谢。问题是我并不完全知道错误消息是什么,所以我只是尝试搜索整个消息并没有得到任何有用的结果。不过我想通了 正中目标。我搜索了很多答案,只有这一个给了我解决方案。缺少main()
函数。【参考方案2】:
以下命令:g++ -o bet.x bet.cpp
表示从单个文件中创建一个名为 bet.x 的可执行文件:bet.cpp
但是要生成可执行文件,您需要缺少一个 main() 函数。
如果你只是想确保语法没问题,你可以通过将-c
传递给 g++ 来构建一个目标文件
另一种选择是添加一个main()
函数,甚至可以编写一些测试来检查代码是否有效。
【讨论】:
以上是关于尝试编译二叉树程序时出错的主要内容,如果未能解决你的问题,请参考以下文章