Я не знаю, почему я не могу создать экземпляр объекта класса B в полностью специализированной функции, несмотря на то, что объявляю функцию другом в классе B. Пожалуйста, помогите. Я не знаю, глупо ли это сомнение но я изучаю шаблоны C ++ впервые.
Я получаю следующую ошибку:
1>c:\users\google drive\learnopencv\learningc\templateexample.cpp(12): error C2065: 'B' : undeclared identifier
1>c:\users\google drive\learnopencv\learningc\templateexample.cpp(12): error C2062: type 'int' unexpected
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.37
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========#include "stdafx.h"using namespace std;
template<typename V>
void DoSomething(V v) //Generic Function
{
B<char> s;
s.data=1;
};
template<>
void DoSomething<int>(int cv) //Specialized Function
{
B<int> b1l; // not able to instantiate an object of class B
};
template<typename T> //Template class B
class B
{
int data;
template<class X1>
friend void DoSomething<X1>(X1);
};
int main(int argc,char *argv[])
{
int x=12;
DoSomething(x);
return 0;
}
Когда вы определяете
template<typename V>
void DoSomething(V v) //Generic Function
{
B<char> s;
s.data=1;
};
B
еще не определено, поэтому вы получите ошибку. Ничто, что не может исправить какой-то повторный заказ
using namespace std;
template<typename T> //Template class B
class B
{
int data;
template<class X1>
friend void DoSomething(X1);
};
template<typename V>
void DoSomething(V v) //Generic Function
{
B<char> s;
s.data=1;
};
template<>
void DoSomething<int>(int cv) //Specialized Function
{
B<int> b1l; // not able to instantiate an object of class B
};
Других решений пока нет …