I am very new to the C++ and i am facing an issue in compiling the following code.
Some one please help me out .Thanks in Advance.
我已按照成员
的建议在头文件中添加了所有模板定义 =============================================== ======================================
Test.h
-------
#包括
使用namespace std;
class B;
typedef std::map<B*,int> mymap;
template <class T>
class A
{
private:
class B
{
public:
B(T);
~B();
private:
//some data members
};
public:
A();
~A();
bool add(T);
bool sort();
private:
mymap m_asc_map;
B* b;
};
template <class T>
A<T>::B::B(T)
{
}
template <class T>
A<T>::B::~B()
{
}
template <class T>
A<T>::A()
{
}
template <class T>
A<T>::~A()
{
}
template <class T>
bool A<T>:: add(T x)
{
b = new B(x);
return true;
}
template <class T>
bool A<T>:: sort()
{
m_asc_map.insert(std::make_pair(b,1));
return true;
}
Test.cc
-------
#include "Test.h"
int main()
{
A<int> a;
a.add(10);
a.sort();
return 0;
}
=====================================================================================
I am getting the following error
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = A<int>::B*, _U2 = int, _T1 = B* const, _T2 = int]’:
Test.h:56: instantiated from ‘bool A<T>::sort() [with T = int]’
Test.cc:7: instantiated from here
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h:90: error: cannot convert ‘A<int>::B* const’ to ‘B* const’ in initialization
答案 0 :(得分:0)
您转发声明B类(class B;
)但未提供定义。 (显然,您在A中稍后声明了另一个class B
,但请注意,::B
(您在全局命名空间中声明的B
)不是A::B
({你在课堂上声明{1}}
此外,它是B
,而不是private
。如果您使用模板,请将所有方法定义放在头文件中,否则会出现更多错误。
此外,Private
声明了一个全局变量,而不是一个类型,因此您不能在以后使用它:std::map<B*,int> mymap;
。尝试做一个“正确的”mymap m_asc_map;
:)
答案 1 :(得分:0)
可能是因为您将模板定义放在* .cc文件中。建议将所有模板定义放在* .h文件中。