[英]c++ undefined symbol when compiling
FIXED: had the method twice in the header file 修复:在头文件中有两次方法
I get the following error when trying to compile my project 尝试编译项目时出现以下错误
% make
g++ -o p4 testTree.o tree.o node.o check.o
Undefined first referenced
symbol in file
Tree::inTree(int) tree.o
ld: fatal: Symbol referencing errors. No output written to p4
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `p4'
Makefile Makefile文件
p4: testTree.o tree.o node.o check.o
g++ -o p4 testTree.o tree.o node.o check.o
testTree.o: testTree.cc tree.h node.h check.h
g++ -c -Wall -Werror testTree.cc
tree.o: tree.h tree.cc node.h check.h
g++ -c -Wall -Werror tree.cc
node.o: node.h node.cc check.h
g++ -c -Wall -Werror node.cc
check.o: check.h check.cc
g++ -c -Wall -Werror check.cc
clean:
rm -f *~ *.o p4
Relevant code from tree.cc and tree.h: 来自tree.cc和tree.h的相关代码:
tree.cc tree.cc
...
bool Tree::inTree(int k) const
{
return locate(k,root) != NULL;
}
...
tree.h tree.h中
#ifndef TREE_H
#define TREE_H
#include "node.h"
#include "check.h"
using namespace std;
class Tree
{
private:
Node *root;
public:
Tree();
Tree(const Tree & t);
const Tree & operator=(const Tree &t);
friend ostream & operator<<(ostream &out, const Tree &t);
bool inTree(int k) const;
double & operator[](int k);
double & operator[](int k) const;
~Tree();
bool inTree(int index);
private:
Node * locate(int k, Node *rt) const;
ostream & display(ostream &out, Node *r, int dir=Node::L) const;
void add(int k, Node*&r);
void kill(Node *&rt);
void copy(Node *rt, Node *&newRt);
};
#endif
I get the feeling that it's something really simple, but I can't seem to figure it out. 我觉得它很简单,但我似乎无法弄明白。
The message you are getting actually comes from the linker , not from the compiler. 您获得的消息实际上来自链接器 ,而不是来自编译器。
One of your member functions, bool Tree::inTree(int index);
你的一个成员函数, bool Tree::inTree(int index);
, is correctly declared and defined as a const
member function: ,被正确声明并定义为const
成员函数:
// Declaration in tree.h
bool inTree(int index) const;
// Definition in tree.cc
bool Tree::inTree(int k) const
// ^^^^^
However, in tree.h
you also define this non- const
overload of inTree()
: 然而,在tree.h
还定义了这个非const
过载inTree()
// Declaration in tree.h, definition (supposedly) nowhere
bool Tree::inTree(int k)
For which no definition is provided . 没有提供定义 。 This is what the linker complains about. 这就是链接器抱怨的内容。
Here is your error: 这是你的错误:
bool Tree::inTree(int k) const
{
return locate(k,root) != NULL;
}
in your .h
you define 在你的.h
你定义
bool inTree(int);
This is a difference! 这是一个区别!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.