
关于C++模版的一个问题求教,如果取模板类内的一个结构体的指针。
template<classT>classA{public:structB{Tt;};B*GetB();private:B*pB;};template<classT>A<...
template <class T>
class A
{
public:
struct B
{
T t;
};
B* GetB();
private:
B* pB;
};
template <class T>
A<T>::B* A<T>::GetB()
{
return this->pB;
}
在VS2005编译的时候会报
错误 2 error C2143: 语法错误 : 缺少“;”(在“*”的前面)
错误 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认
错误 4 fatal error C1903: 无法从以前的错误中恢复;正在停止编译
,求问谁知道怎么解决吗?
实际就是不认识A<T>::B*是什么。
我知道把B拿出去可以通过, 但这个代码其实是从MS Speech SDK的示例中抽出来的一段
,然后我把它简化了, 但我不希望改原来的代码结构. 原例子是:
我认为应该是编译器版本的差异导致的, 而且已经直接通过修改工程属性参数,纠正了一些会报编译错误的地方.
/ CSPList<TYPE, ARG_TYPE>
template<class TYPE, class ARG_TYPE>
class CSPList
{
protected:
struct CNode
{
CNode* pNext;
CNode* pPrev;
TYPE data;
};
public:
.....
CNode* NewNode(CNode*, CNode*);
......
}
template<class TYPE, class ARG_TYPE>
CSPList<TYPE, ARG_TYPE>::CNode*
CSPList<TYPE, ARG_TYPE>::NewNode(CSPList::CNode* pPrev, CSPList::CNode* pNext)
{
......
} 展开
class A
{
public:
struct B
{
T t;
};
B* GetB();
private:
B* pB;
};
template <class T>
A<T>::B* A<T>::GetB()
{
return this->pB;
}
在VS2005编译的时候会报
错误 2 error C2143: 语法错误 : 缺少“;”(在“*”的前面)
错误 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认
错误 4 fatal error C1903: 无法从以前的错误中恢复;正在停止编译
,求问谁知道怎么解决吗?
实际就是不认识A<T>::B*是什么。
我知道把B拿出去可以通过, 但这个代码其实是从MS Speech SDK的示例中抽出来的一段
,然后我把它简化了, 但我不希望改原来的代码结构. 原例子是:
我认为应该是编译器版本的差异导致的, 而且已经直接通过修改工程属性参数,纠正了一些会报编译错误的地方.
/ CSPList<TYPE, ARG_TYPE>
template<class TYPE, class ARG_TYPE>
class CSPList
{
protected:
struct CNode
{
CNode* pNext;
CNode* pPrev;
TYPE data;
};
public:
.....
CNode* NewNode(CNode*, CNode*);
......
}
template<class TYPE, class ARG_TYPE>
CSPList<TYPE, ARG_TYPE>::CNode*
CSPList<TYPE, ARG_TYPE>::NewNode(CSPList::CNode* pPrev, CSPList::CNode* pNext)
{
......
} 展开
3个回答
展开全部
B结构也要模板化。
template <class T> struct B
{
T t;
};
template <class T>
class A
{
public:
B<T>* GetB();
private:
B<T>* pB;
};
template <class T>
B<T>* A<T>::GetB()
{
return this->pB;
}
void main()
{
}
template <class T> struct B
{
T t;
};
template <class T>
class A
{
public:
B<T>* GetB();
private:
B<T>* pB;
};
template <class T>
B<T>* A<T>::GetB()
{
return this->pB;
}
void main()
{
}
展开全部
#include<iostream>
using namespace std;
template <class T>
struct B
{
T t;
};
template <class T1>
class A
{
public:
B<T1>* GetB();
private:
B<T1>* pB;
};
template <class T1>
B<T1>* A<T1>::GetB()
{
return this->pB;
}
int main()
{
A<int> a;
B<int>* b;
b=a.GetB();
cout<<b<<endl;
return 0;
}
using namespace std;
template <class T>
struct B
{
T t;
};
template <class T1>
class A
{
public:
B<T1>* GetB();
private:
B<T1>* pB;
};
template <class T1>
B<T1>* A<T1>::GetB()
{
return this->pB;
}
int main()
{
A<int> a;
B<int>* b;
b=a.GetB();
cout<<b<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用VC6.0编译,连接,运行都OK啊,没错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询