简体   繁体   English

Eclipse / CDT / MinGW C ++和奇怪的错误

[英]Eclipse/CDT/MinGW C++ and strange errors

I write code for GCC C++. 我为GCC C ++编写代码。 I write class with template called 'graph'. 我用名为'graph'的模板编写类。

graph.h: 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(obviously, is not final): 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;
}

And I got these build errors: 我得到了这些构建错误:

..\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++) {
                      ^

What's wrong? 怎么了?

The graph::findElement function is associated with a template and needs a specializaiton or instance with it. graph::findElement函数与模板相关联,需要特殊化或实例。

A solution is to place the function in the header file with the template and add the template specification: 解决方案是将函数放在带有模板的头文件中,并添加模板规范:

template <class T>
int
graph<t>::findElement(T a)
{
//...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM