C ++:定义函数

时间:2017-11-14 06:12:22

标签: c++

我正在尝试用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查看调用)`

2 个答案:

答案 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; } 未定义 - 非常清楚。这就是缺少如何创建新节点的定义。