基类 T 无效错误
Invalid Base Class T error
我正在尝试做这样的事情,但是,我收到一个错误,"基类 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;
}
为纳瓦兹的利益而编辑。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- is_same和variadic模板编译时错误无效转换
- printf 和 strftime 的参数错误无效
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 错误:无效使用无效
- 发布信号量返回错误 6(无效句柄)
- C++17 可选树,错误:无效使用不完整的类型
- C++ 线程函数指针实现返回错误无效使用非静态成员函数
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- valgrind错误无效读数4
- X11 XGetImage badmatch错误(无效的参数属性)
- free():C++中的指针错误无效
- 使用 valgrind 的地图中的读取大小错误无效
- 错误:无效的基类C
- 错误:无效使用了void表达式C++
- C++链接错误.无效
- free()错误:无效的下一个大小(fast)
- 我收到错误"无效使用不完整的类型'class map'