2013-11-07 2 views
1

Я пишу код для GCC C++. Я пишу класс с шаблоном под названием «graph».Eclipse/CDT/MinGW C++ и странные ошибки

graph.h:

#include <vector> 

template <class T> struct graphNode { 
T* elementLink; 
std::vector<int> edges; 
}; 

template <class T> class graph { 
private: 
    std::vector< graphNode<T> > nodes; 
    int findElement (T); 
public: 
    void add(T); 
    void addEdge(T, T); 
    void deleteEdge(T, T); 
    bool isEmpty(); 
    std::vector<T> getAdjacent(T); 
}; 

graph.cpp (очевидно, не является окончательным):

#include "graph.h" 

int graph::findElement(T a) { 
    for (int i = 0; i < nodes.size(); i++) { 
     if (nodes[i] == a) { 
      return i; 
     } 
    } 
    return -1; 
} 

И я получил эти ошибки построения:

..\graph.cpp:3:24: error: 'template<class T> class graph' used without template parameters 
template <class T> int graph::findElement(T a) { 
         ^
..\graph.cpp: In function 'int findElement(T)': 
..\graph.cpp:4:22: error: 'nodes' was not declared in this scope 
    for (int i = 0; i < nodes.size(); i++) { 
        ^

Что случилось?

+0

Unrelated: Рано или поздно вы собираетесь столкнуться с другой проблемой, поэтому найдите время, чтобы прочитайте также: [Почему шаблоны могут быть реализованы только в файле заголовка?] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) , – WhozCraig

ответ

3

Функция graph::findElement связана с шаблоном и нуждается в specializaiton или экземпляре с ней.

Решение состоит в том, чтобы поместить функцию в заголовочном файле с шаблоном и добавьте спецификацию шаблона:

template <class T> 
int 
graph<t>::findElement(T a) 
{ 
//... 
} 
Смежные вопросы