我正在浏览这段代码,在那里我遇到了一段时间从主
调用此代码#include <iostream>
#include <vector>
using namespace std;
class abc
{
public:
enum example
{
a=1,
b=2,
c=3,
d=4
};
};
template<typename T>
class xyz
{
public:
xyz(T &v,abc::example ex=abc::a):b(v),len(sizeof(T))
{
}
protected:
T &b;
int len;
};
#define Buffer_length 1024
template<typename T>
class demo
{
public:
demo(T &v):b(v)
{
length=v.size();
cout<<"length:"<<length<<endl;
typename T::size_type i=0;
for(;i<length;++i)
{
*(Buffer+i)=v[i];
}
}
protected:
typename T::size_type length;
typename T::value_type Buffer[Buffer_length];
T &b;
};
我不确定这是否是调用构造函数&#34; demo&#34;的正确方法,但是当我尝试这样的时候:
int main()
{
string str="Hello world";
xyz<string> obj1(str,abc::example::a);
demo<xyz> obj2(obj1);
}
我收到以下错误:
In function 'int main()':
58:9: error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class demo'
58:9: error: expected a type, got 'xyz'
58:15: error: invalid type in declaration before '(' token
58:20: error: cannot convert 'xyz<std::basic_string<char> >' to 'int' in initialization
58:11: warning: unused variable 'obj2' [-Wunused-variable]
我想知道如何调用构造函数演示。
答案 0 :(得分:0)
xyz
不是具体类型。您无法使用它来实例化demo
。
xyz<string>
是具体的类型。看起来你正在尝试使用
demo<xyz<string> >