基类 T 无效错误

Invalid Base Class T error

本文关键字:错误 无效 基类      更新时间:2023-10-16

我正在尝试做这样的事情,但是,我收到一个错误,"基类 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;
}

为纳瓦兹的利益而编辑。