我需要在C ++中创建一个类模板数组,但编译器不允许它。 示例:
.import __MYMEMSEG_LOAD__, __MYMEMSEG_SIZE__
主要功能中的
class CRefBase {
public:
virtual ~CRefBase() = 0;
};
template<class T>
class CRef : public CRefBase {
private:
T *Obj;
public:
CRef(T *Obj){ this->Obj=Obj; }
}
我看到了this主题,但这不是我的答案。
由于
答案 0 :(得分:1)
public class MainActivity extends AppCompatActivity {
TextView word;
TextView plsenteracharacter;
EditText givenchar;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
word = (TextView)findViewById(R.id.textView);
plsenteracharacter = (TextView)findViewById(R.id.textView2);
givenchar = (EditText)findViewById(R.id.editText);
dene = (Button)findViewById(R.id.button);
//Create a dictionary
final String [] dictionary = {"home"};
//Create a random number for selecting a random word from dictionary
final int rnd = (int)(Math.random()*1);
//Take a character from user
final String enteredchar = givenchar.getText().toString();
//Selected a random string
final String str = dictionary[rnd];
//Make that string a charArray
final char[] charArray = str.toCharArray();
//Creating "_" length of the string
final char answer[] = new char[str.length()];
int k;
for(k=0;k<charArray.length;k++)
{
answer[k]='_';
}
word.setText(answer, 0, k);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int p;
for (p=0;p<charArray.length;p++){
if(enteredchar== String.valueOf(charArray[p])){
answer[p] = enteredchar.charAt(0);
word.setText(String.valueOf(answer));
}
}
}
});
}
}
是一个类模板,CRef
是一个(不可实例化的)抽象基类。
你没有按照标题所说的那样做:
如何创建模板化类的数组?
哦,你需要一组用于多态的poitnters(以及一个CRefBase
基类析构函数):
virtual
就是这样。好好管理动态分配的内存。
答案 1 :(得分:1)
即使您尝试实例化派生类,这也是一个糟糕的主意,因为无法以这种方式对数组进行索引 - 当您使用0以外的任何索引将指针索引到CRefBase
时,它们必须只能是CRefBase
,并且不能是任何派生类。
此外,在new[]
的使用中存在大量异常不安全和内存泄漏,这在所有合理的代码库中都被禁止。使用像std::vector<std::unique_ptr<CRefBase>>
之类的东西是安全的,如果你创建一个派生类类型的对象,你实际上可能会创建一个有效的程序。
答案 2 :(得分:-1)
以下代码表示纯虚函数,因此“CRefBase”是一个抽象基类,这意味着它无法实例化!
virtual ~CRefBase()=0;
作为您的问题,模板支持数组。你可以先修复你的编译问题然后重新测试