2013-12-04 3 views
3

Я пытаюсь узнать о шаблонах, хочу, чтобы моя пара классов могла содержать два объекта любого типа. Я просто хочу теперь предоставить функцию доступа для obj1. Но я получаю следующее сообщение об ошибке при попытке complile:C++ template - error: ожидаемый инициализатор перед '<' token

ошибка: ожидается инициализатор до того «<» лексем пары T1 :: getObj1()

#include <iostream> 
#include <stdio.h> 
#include <string.h> 

using namespace std; 

template <class T1, class T2> 
class pair 
{ 
    public: 
    pair(const T1& t1, const T2& t2) : obj1(t1), obj2(t2){}; 

    T1 getObj1(); 

    private: 
    T1 obj1; 
    T2 obj2; 
}; 

template <class T1, class T2> 
T1 pair<T1,T2>::getObj1() 
{ 
    return obj1; 
} 



int main() 
{ 
    return 0; 
} 
+1

попробуйте удалить точку с запятой после конструктора. –

+0

Нет, это не исправить, спасибо! – DukeOfMarmalade

+0

Вы сталкиваетесь с [std :: pair] (http://en.cppreference.com/w/cpp/utility/pair), вместо этого попробуйте что-то вроде «mypair». –

ответ

12

пара имя стандартного класса и с using namespace std, есть столкновение.

несколько решений:

  • Переименуйте свой класс к чему-то еще.
  • Dont use using using
+0

Пришел сюда, чтобы сказать то же самое. –

+0

Да, это исправлено! Отметьте как ответ, когда смогу. Благодаря!! – DukeOfMarmalade

+5

+1. Да, ** это **, поэтому ** ** использовать ** using namespace std; '(среди прочих причин, конечно) – Angew

Смежные вопросы