Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我得到架构x86_64错误的未定义符号_C++_Xcode_Linker Errors - Fatal编程技术网

C++ 为什么我得到架构x86_64错误的未定义符号

C++ 为什么我得到架构x86_64错误的未定义符号,c++,xcode,linker-errors,C++,Xcode,Linker Errors,我得到一个架构x86_64的未定义符号错误,但我不知道为什么。 我正在使用链表和模板创建堆栈数据类型 StackLinkedList.h #ifndef __StackLinkedList__StackLinkedList__ #define __StackLinkedList__StackLinkedList__ #include <iostream> using namespace std; #endif /* defined(__StackLinkedList__Stack

我得到一个架构x86_64的未定义符号错误,但我不知道为什么。 我正在使用链表和模板创建堆栈数据类型

StackLinkedList.h

#ifndef __StackLinkedList__StackLinkedList__
#define __StackLinkedList__StackLinkedList__

#include <iostream>
using namespace std;

#endif /* defined(__StackLinkedList__StackLinkedList__) */

template <class Item>
class StackLinkedList {
public:
    StackLinkedList();
    void push(Item p);

private:
    StackLinkedList<Item>* node;
    Item data;
};
\ifndef\uuuu StackLinkedList\uuu StackLinkedList__
#定义\uuuu堆栈链接列表\uuuu堆栈链接列表__
#包括
使用名称空间std;
#endif/*已定义(_StackLinkedList__StackLinkedList__)*/
模板
类StackLinkedList{
公众:
StackLinkedList();
无效推送(p项);
私人:
StackLinkedList*节点;
项目数据;
};
StackLinkedList.cpp

#include "StackLinkedList.h"

template <class Item>
StackLinkedList<Item>::StackLinkedList() {
    node = NULL;
}

template <class Item>
void StackLinkedList<Item>::push(Item p) {
    if(node == NULL) {
        StackLinkedList<Item>* nextNode;
        nextNode->data = p;
        node = nextNode;
    }else {
        node->push(p);
    }
}
#包括“StackLinkedList.h”
模板
StackLinkedList::StackLinkedList(){
node=NULL;
}
模板
作废StackLinkedList::推送(项目p){
if(node==NULL){
StackLinkedList*下一个节点;
nextNode->data=p;
node=nextNode;
}否则{
节点->推送(p);
}
}
main.cpp

#include "StackLinkedList.h"

int main() {
    StackLinkedList<int>* stack;

     stack->push(2);
}
#包括“StackLinkedList.h”
int main(){
StackLinkedList*堆栈;
堆栈->推送(2);
}
错误详细信息:

Undefined symbols for architecture x86_64:
  "StackLinkedList<int>::push(int)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
架构x86_64的未定义符号: “StackLinkedList::push(int)”,引用自: _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我使用的是Xcode 6.1。

您必须在头文件中声明/定义模板函数,因为编译器必须在编译时使用有关实例化类型的信息。因此,将模板函数的定义放在
.h
文件中,而不是放在
cpp


有关更多详细信息。

您还应该修复
StackLinkedList.h
中的include sentinel语句,并将
#endif…
行移到头文件的末尾。否则,如果多次包含头文件,编译器将尝试重新定义类,这可能会导致生成问题。