У меня есть проект DLL с файлом .h
, который определяет класс и связанные переменные все в пространстве имен. Это Windows XP с помощью VS 2008. Хотя это очевидно, это GStreamer программы :-)Пространства имен, используемые в нескольких исходных файлах C++
Я хочу, чтобы в пространстве имен IPC_RECEIVER
переменной receiverList
, но я хочу, чтобы посмотреть на нее за пределами этого пространства имен в, например, соответствующее пространство имен IPC_SENDER
.
// IPC-Receiver..h
#ifndef IPCRECEIVER_H_
#define IPCRECEIVER_H_
namespace IPC_RECEIVER
{
.... class declaration.
}
typedef std::list<IPC_RECEIVER::GstReceiver*> ReceiverList_t;
typedef std::list<IPC_RECEIVER::GstReceiver*>::iterator ReceiverListIter_t;
#endif /* IPCRECEIVER_H_ */
Затем CPP файл, в котором переменная g_receiverList объявляется в пространстве имен IPC_RECEIVE, но не в любом классе.
// IPC-ReceeiverAPIs.cpp
#include "IPC-Receiver.h"
namespace IPC_RECEIVER
{
ReceiverList_t g_receiverList; // list to track receivers
...
}
И, наконец, третий файл
// IPC-Receiver.cpp
#include "IPC-Receiver.h"
extern ReceiverList_t g_receiverList;
namespace IPC_RECEIVER
{
GstReceiver::GstReceiver()
{
g_receiverList.push_back(this);
}
}
Когда я компилирую это я получаю эту ошибку:
Error 1 error LNK2001: unresolved external symbol
"class std::list<class IPC_RECEIVER::GstReceiver *,
class std::allocator<class IPC_RECEIVER::GstReceiver *> > g_receiverList"
([email protected]@[email protected]@[email protected]
@[email protected]@[email protected]@@[email protected]@@[email protected]@A)
IPC-Receiver.obj
Я пробовал различные комбинации добавления имя пространства имен в экстерном и в конструктор.
С
IPC_RECEIVER::g_receiverList.push_back(this);
я получаю:
Error 1 error C2039: 'g_receiverList' : is not a member of
'IPC_RECEIVER' x:\Projects\IPC-dll\IPC-dll\IPC-Receiver.cpp 54 IPC-dll
И
extern ReceiverList_t IPC_RECEIVER::g_receiverList;
Я получаю две ошибки:
Error 2 error C2039: 'g_receiverList' : is not a member of 'IPC_RECEIVER' x:\Projects\IPC-dll\IPC-dll\IPC-Receiver.cpp 22
Error 2 error C2039: 'g_receiverList' : is not a member of 'IPC_RECEIVER' x:\Projects\IPC-dll\IPC-dll\IPC-Receiver.cpp 55
, где 22 и 54 являются линиями, в которых используется g_receiverList
.
используя ::
вместо IPC_RECEIVER::
также не работает.
Итак, как мне это сделать: объявить переменную в пространстве имен в одном файле и использовать ее в другом?
Является ли это проблемой порядка ссылок?
Bingo! Работал немедленно. –