我正在尝试用C ++实现一个链表。我在同一个文件中定义了链表和节点类以及linkedlist类的方法。这是我的链表类:
template <class T>
class LinkedList{
public:
Node<T> *head;
int size;
LinkedList();
void push(T data);
T pop();
T remove(T *target, int (*compfunc)(T *, T *));
void clear();
int getSize();
void printList();
};
我定义了推送方法:
template <class T>
void LinkedList<T>::push(T data){
Node<T> *n = new Node<T>;
n -> data = data;
n->next = this->head;
this->head = n;
this->size++;
}
但是当我尝试运行main方法时,我收到一条错误,指出LinkedList :: push(T数据)未定义。
主要功能:
int main(){
LinkedList<int> list;
for (int i = 0; i < 5; ++i)
{
list.push(i);
}
list.printList();
return 0;
}
除了push之外的所有其他方法似乎都能正常工作。我得到的错误是:
架构x86_64的未定义符号: “operator new(unsigned long)”,引自: linkedList-1c3a85.o中的LinkedList :: push(int) ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)`
答案 0 :(得分:0)
删除未提供的功能和基本节点
<?PHP
session_start();
$userid = $_SESSION['userid'];
$cname = $_POST['cname'];
$cadd = $_POST['cadd'];
$cphone = $_POST['cphone']
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
<title>Trial </title>
</head>
<body>
<div data-role="page">
<div data-role="header">
<h1>
Reservation Form
</h1>
</div>
<div data-role="content">
<form method="post" action="datetime.php">
<div data-role="fieldcontain">
<label for="date">
Select Date
</label>
<input type="datetime-local" step="3600" name="datetime" id="datetime" value=""/>
<div data-role="fieldcontain">
<label for="slot">
Slot
</label>
<input type="button" value="Slot 1" data-role="button" />
<input type="button" value="Slot 2" data-role="button" />
</div>
<div>
<input type="submit" value="Check Availability" data-role="button" data-inline="true"/>
</div>
<div>
<input type="submit" value="Next" data-role="button" data-inline="true"/>
</div>
</form>
<div data-role="footer">
Test
</div>
</div>
</body>
</html>
使用g ++ 5.4&amp;编译好。铿锵3.8 您是否缺少节点类模板的定义?
答案 1 :(得分:0)
这是&#34;读取错误消息的情况。&#34;我与之交互的几乎所有C ++编译器都非常非常详细。很多文字。但所有信息都在那里。
也许如果我们分解您的错误消息,问题可能会变得更加简单:
Undefined symbols for architecture x86_64: "operator new(unsigned long)",
referenced from: LinkedList::push(int)
in linkedList-1c3a85.o ld:
symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)`
核心问题是未定义的符号&#39;。什么符号? operator new(unsigned long)
。LinkedList::push(int)
。等等......用的是哪里?在LinkedList::push(int)
内部。
好的,查看Node<T> *n = new Node<T>;
内部LinkedList::push(int)
。因此,编译器不喜欢该行,并且显然无法为您自动生成构造函数。
也就是说,问题是不 public static IterableResult<String[], ParsingContext> readCSV(String filePath) {
File file = new File(filePath);
//configure the parser here. By default all values are trimmed
CsvParserSettings parserSettings = new CsvParserSettings();
//create the parser
CsvParser parser = new CsvParser(parserSettings);
//create an iterable over rows. This will not load everything into memory.
IterableResult<String[], ParsingContext> rows = parser.iterate(file);
return rows;
}
未定义 - 非常清楚。这就是缺少如何创建新节点的定义。