我是C ++模板的新手,而且我在一些编译器投诉方面苦苦挣扎。我在模板类中定义了一个类范围类型,并希望从其他地方引用这种类型。我尝试了不同的方法来限定类型的名称,但我唯一能实现的是获取不同的错误消息。
以下是mylist.h
中我的类的定义,这是一个经典的列表实现:
template<typename T> class MyList {
public:
class ListElement; // forward declaration
typedef ListElement* LPOS; // the problematic typedef
// helper class for list elements
class ListElement {
LPOS next;
int content;
public:
ListElement(T);
LPOS getNext();
...
};
// the list itself
MyList();
ListElement* first;
LPOS add(T);
LPOS insert(T, LPOS);
... // more list functions
};
现在我想在main.cpp
中使用外部的LPOS类型:
include "mylist.h"
...
void testList (void) {
LPOS pos; // compiler error: expected ';' before pos
MyList<T>::LPOS pos; // compiler error: expected initializer before pos
MyList::LPOS pos; // compiler error: expected ';' before pos
我尝试使用“使用”,但这也没有带来任何影响。任何帮助将不胜感激。
答案 0 :(得分:2)
MyList<T>::LPOS pos;
:此处T
没有任何意义。您需要使用实际类型实例化MyList
:
MyList<double>::LPOS pos;
应该可以正常使用。
double
就是一个示例:您需要将T
更改为您需要的类型。
答案 1 :(得分:0)
你需要一些具体类型,例如MyList<int>::LPOS
T
testList
在MyList<int>::LPOS
无效。问题是您需要正确的模板参数,因为MyList<double>::LPOS
与{{1}}不同。找出你需要的东西,并使用正确的。