2015-09-25 3 views
1

У меня есть класс, конструктор которого должен быть инициализирован аргументами класса шаблона. Теперь мне нужно передать конструктору этого класса другому методу в main(). Но я пытаюсь сделать это, это порождает ошибку, и я не могу получить решение для этого.Передача конструктора с аргументами класса шаблона другой функции

template<class K> 

Class Student 
{ 

    friend void printFunction(); 
    public: 
    Student(K val) 
    {std::cout<<val;} 

}; 

void printFunction(Student object) 
{ 

    ...... 

} 

int main() 
{ 

    Student <int> object(10); 
    printFunction(object); //This line throws an error 

} 
error: use of class template 'Student' requires template arguments 

ответ

1

С кодом возникает несколько проблем. Первым и простым является то, что вы передаете имя класса Student на звонок вашего printFunction. Вместо этого вы должны позвонить printFunction(object).

Во-вторых, для printFunction, чтобы принять экземпляр класса шаблона Student, вам необходимо сделать его также шаблоном. См. Рабочий пример ниже.

#include <iostream> 

template<class K> 
class Student; 

template<class K> 
void printFunction(Student<K> object) 
{ 
    std::cout << object.val; 
} 


template<class K> 
class Student 
{ 
    friend void printFunction<>(Student<K>); 

public: 
    Student(K val) : val(val) {} 

private: 
    K val; 
}; 



int main() 
{ 
    Student<int> object(10); 
    printFunction(object); 
} 
+0

Спасибо, минус 'printFunction (Student);' была просто ошибкой при размещении моего вопроса здесь. Ваше решение сработало, но я не понял требования объявления шаблона 'выше друга' void printFunction (Student ); 'inside Class. Почему мы не можем просто написать 'friend void printFunction (Student ) ;.'. Я знаю, тогда компилятор выдает ошибку, но почему? – user2756695

+0

@ user2756695 Я отредактировал код, чтобы использовать форвардное объявление класса 'Student' и специализацию друга' printFunction'. Отвечает ли это на ваш вопрос? – Rostislav

+0

@ user2756695 если вы допустили ошибку при отправке вопроса - тогда пришло время исправить это, чтобы мы знали, каков ваш реальный вопрос? – PiotrNycz

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