У меня есть класс шаблона, который открывается, в котором я добавил метод. Этот класс находится в пространстве имен A. Теперь я вызываю этот метод в другое пространство имен (скажем, B). Первоначально компилятор дал мне ошибку компоновщика, в которой говорилось «неразрешенный внешний символ» для этого конкретного метода.
Однако, если я вызываю этот метод внутри одного и того же пространства имен (это A), он хорошо связывается. После этого он хорошо связывается и в пространстве имен B.
Почему это могло произойти?
Связано ли это с созданием объекта Template моего класса?
Атула
Вот фрагмент кода ...Шаблон класса, дающий ссылку на ошибку
namespace sss
{
namespace AAA
{
template <<typename T, typename TAlloc = Allocator<T> >
class DLL_EXPORT A
{
public:
// Some other functions that are working fine ...
bool fooA() const;
{
return Size()>0;
}
};
}
}
//I get a linker error when I call it in another namespace (say B)...
//I am accessing this method in public method of some other class in namespace B
// Including the header for class A ...
#include A.h
namespace QQQ
{
namespace B
{
class B
{
private:
AAA::A obj; // Object of class A ...
public:
// SOme methods
// Method that calls fooA ...
GetResult()
{
fooA // This causes causes linker error when i call it here,
// but, it works when i call it in namespace AAA,
// and then it, it works here as well
}
};
Когда я называю этот метод из пространства имен B, это дает неразрешенный внешний символ, но, когда я называю это внутри пространства имен A, он связывает хорошо в A, и снова в B.
Любые идеи?
Можете ли вы привести пример минимального кода, который демонстрирует это? –
Можете ли вы показать свой код? – UmmaGumma
Мне просто интересно, что означает templaet namespace? – UmmaGumma