Я получил вашу программу для компиляции, однако, честно говоря, я не уверен, что именно я действительно сделал.Я могу только проявить свою интуицию и сделать все возможное, чтобы объяснить, что я только что сделал:
#include <iostream>
template<typename T>
void func();
template<typename T>
class MyClass
{
private:
static T statTemp;
public:
friend void func<T>();
};
template<typename T>
T MyClass<T>::statTemp(1);
template<typename T>
void func()
{
T n = MyClass<T>::statTemp;
std::cout << n << std::endl;
}
int main()
{
func<int>();
}
Сначала я заметил ваш оригинал funct(T n)
, который вы объявили в верхней части файла, иожидалось, что T n
будет передано в функцию.В основном вы не делаете такой вещи.Поэтому, когда вы вызываете func(T n)
и ничего не передаете в функцию, компилятор злится, так как ожидает, что что-то будет передано. Возможно, вы можете перегрузить функцию, в которой вызывается другая func(T n)
, где вы ее передаете T n = MyClass<T>::statTemp;
Наконец, у вашего friend void func<>()
не было типа шаблона, так что компилятор тоже был недоволен этим.
Надеюсь, это поможет.