gpt4 book ai didi

c++ - C++ 的 Apple mach-o 链接器 (id) 错误

转载 作者:行者123 更新时间:2023-11-30 02:50:09 24 4
gpt4 key购买 nike

我在 Xcode 5.0 中创建了一个新项目来实现一个 Queue 类,如下所示:我创建了一个名为 QueueArray.h 的 .h 文件,它包含以下内容:

#ifndef __Queue__QueueArray__
#define __Queue__QueueArray__

#include <iostream>

template <class T>
class QueueArray
{
public:
QueueArray(int cap);
~QueueArray();

void Enqueue(T& val);
T Dequeue(void);
T GetFirst(void);
T GetLast(void);
bool IsEmpty(void);
bool IsFull(void);
void Clear(void);

private:
T* data;
int capacity, size, first, last;
};

#endif

和一个名为 QueueArray.cpp 的 .cpp 文件,其中包含以下内容:

#include "QueueArray.h"
using namespace std;

template <class T>
QueueArray<T>::QueueArray(int cap)
{
capacity = cap;
data = new T[capacity];
size = 0;
first = last = -1;
}

template <class T>
QueueArray<T>::~QueueArray(void)
{
delete [] data;
}

template <class T>
void QueueArray<T>::Enqueue(T& el)
{
if(IsFull() == true)
{
printf("\n Can't enqueue into a full queue!");
return;
}
if(IsEmpty() == true)
first = last = 0;
else if(last == capacity-1)//if at the last entry
last = 0; //wrap around to the first entry
else
last++;
data[last] = el;
size++;
}

template <class T>
T QueueArray<T>::Dequeue()
{
if(IsEmpty() == true)
{
printf("\n Can't dequeue from an empty queue!");
return -1;
}
T el = data[first];
if(first == last) //if only one element in queue
last = first = -1; //we'll get an empty queue
else if(first == capacity-1) //if at the last entry
first = 0; //wrap around to the first entry
else //normal case
first++;
size--;
return el;
}

template <class T>
T QueueArray<T>::GetFirst()
{
return data[first];
}

template <class T>
T QueueArray<T>::GetLast()
{
return data[last];
}

template <class T>
bool QueueArray<T>::IsEmpty(void)
{
return size == 0;
}

template <class T>
bool QueueArray<T>::IsFull(void)
{
return size == capacity;
}

和一个包含以下内容的 main.cpp 文件:

#include <iostream>
#include "QueueArray.h"
using namespace std;

int main(int argc, const char * argv[])
{
QueueArray<int> q(100);
for (int i=0; i<100; i++)
{
q.Enqueue(i);
}
for (int i=0; i<100; i++) {
cout<<q.Dequeue()<<endl;
}
return 0;
}

当我尝试运行该项目时,出现一条消息,提示“构建失败”,这是错误的屏幕截图:

Screenshot

如何解决?

最佳答案

编译器在使用之前需要查看模板的定义。

http://www.parashift.com/c++-faq-lite/templates-defn-vs-decl.html

解决方案不止一种:

一个。将定义从 .cpp 文件移动到 .h 文件

使用 export 关键字如果您的编译器支持

http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl-export-keyword.html

添加内联声明:

http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html

关于c++ - C++ 的 Apple mach-o 链接器 (id) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com