2011-02-25 5 views
2

я написал шаблон класса (в файле abc.hpp):Несоответствие типа с использованием шаблона в C++

template <class Node> 
class Edge { 
public: 
    Edge(Node n1, Node n2):_start(MIN(n1,n2)),_end(MAX(n1,n2)) {}; 
    Node GetStart()const {return _start;} 
    Node GetEnd()const {return _end;} 
    friend std::ostream& operator<<(std::ostream& os, const Edge<Node>& ed) 
    { 
     os << "(" << ed._start << ", " << ed._end << ")"; 
     return os; 
    } 
protected: 
    Node _start; 
    Node _end; 
}; 

И я написал тестовую программу:

#include <iostream> 
#include "abc.hpp" 

int main(){ 
    Edge<int> my_var (1,2); 
    Edge<int> my_var2 (1,3); 
    int vstart = my_var.GetStart; 
    int vend = my_var.GetEnd; 
    cout << my_var << " : " << my_var2 << endl; 
} 

Когда я пытаюсь скомпилировать его (с помощью devcpp) компилятор выдает сообщение об ошибке относительно линий int vstart = my_var.GetStart; и int vend = my_var.GetEnd;

argument of type `int(Edge<int>::)() const` does not match `int` 

В чем проблема и как его исправить?

ответ

7

Вы пытаетесь присвоить функцию VSTART, вместо того, чтобы в результате вызова функции:

int vstart = my_var.GetStart(); // <- I added() here 
int vend = my_var.GetEnd();  // <- and here. 
Смежные вопросы