0
我已經創建了自己的阻塞隊列,我遇到了一些麻煩搞清楚爲什麼我得到一個鏈接錯誤(注意這是一個Qt應用程序在Visual Studio 2010):解析外部符號
#ifndef BLOCKING_QUEUE_H
#define BLOCKING_QUEUE_H
#include <QObject>
#include <QSharedPointer>
#include <QWaitCondition>
#include <QMutex>
#include <queue>
namespace TestingNS
{
template<typename Data>
class BlockingQueue
{
private:
std::queue<QSharedPointer<Data>> _queue;
QMutex _mutex;
QWaitCondition _monitor;
volatile bool _closed;
public:
BlockingQueue();
void Close();
size_t Size();
void Empty();
bool IsClosed();
bool Enqueue(QSharedPointer<Data> data);
bool TryDequeue(QSharedPointer<Data>& value, unsigned long time = ULONG_MAX);
};
}
#endif //BLOCKING_QUEUE_H
的實現是多一點的時間,所以我有一個pastie它:http://pastie.org/5368660
程序入口點是這樣的:
#include <QtCore/QCoreApplication>
#include <QTimer>
#include <iostream>
#include "BlockingQueue.h"
using namespace std;
using namespace TestingNS;
class Item
{
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
BlockingQueue<Item> queue;
cout << "Press any key to exit!" << endl;
char in;
cin.get(in);
QTimer::singleShot(0, &a, SLOT(quit()));
return a.exec();
}
鏈接器錯誤我得到的是:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall TestingNS::BlockingQueue<class Item>::BlockingQueue<class Item>(void)" ([email protected]@@@[email protected]@[email protected]) referenced in function _main
我不明白爲什麼鏈接器無法找到構造函數(也不是來自BlockingQueue
任何其他方法)。有任何想法嗎?
BlockingQueue的實現在哪裏? – imreal
看起來像另一個受騙者爲[爲什麼模板只能在頭文件中實現?(http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-文件)。 –
@Nick在我的問題中看到了pastie鏈接。 – Kiril