[英]Invalid Base Class T error
我正在尝试做这样的事情,但是,我收到一个错误“ Invalid Base class T”。 据我们所知,在编译时基类将使用类型名称T实例化,而我将在编译时获得T的定义。 我尝试用“类”替换“类型名”,但仍然遇到相同的错误。 有任何想法吗 ?
template <typename T>
class Base
{
private:
class A : public T{};
};
// It works when I do the following in main ...
class A{}
Base* B = new Base<A> B;
// It throws error, when I pass in int,double,float,
//makes sense,because these are basic data types ...
Base* B = new Base<int> B;
// Neil's Snippet with the error reproduced ...
#include <iostream>
using namespace std;
template <typename T>
class Base
{
public :
Base::Base(int a)
{
A a;
}
private:
class A : public T{};
};
Base <int> b;
int main(){
cout << &b << endl;
}
Typename
不是有效的C ++关键字, typename
是。 相似Class
与class
不同。
请注意,C ++区分大小写。 除此之外,您在代码中缺少分号。
class A : public T{}; // missing semicolon here
以下代码应编译:
template <typename T>
// ^ lower case
class Base
{
private:
class A : public T {}; // < lost ;
A a; // do you use class A in this way ?
};
注意,在实例化时T
应该是完整类型。 以下将失败:
class some; // incomplete type
Base<some> a;
您在其中遇到了一些基本的语法错误,这使您感到悲伤:Typename应该是typename,并且在内部类定义之后需要使用半冒号,因此可以完美地编译:
template <typename T>
class Base
{
private:
class A : public T{};
};
这样编译:
#include <iostream>
using namespace std;
template <typename T>
class Base
{
private:
class A : public T{};
};
Base <int> b;
int main(){
cout << &b << endl;
}
为纳瓦兹的利益而编辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.