use*_*461 1 c++ eclipse virtual class instance
我试图使用虚拟类从另一个类中的一个类调用方法.我尝试了几种实例化虚拟类的方法,但总是遇到一些错误,我做错了什么?这是三个代码片段.
我正在尝试使用虚拟类SimData.h:
#ifndef SIMDATA_H_
#define SIMDATA_H_
class SimData
{
public:
virtual void onSimUpdate(int id)=0;
};
#endif /* SIMDATA_H_ */
Run Code Online (Sandbox Code Playgroud)
从maintask.h调用函数
...
class maintask : public SimData
{
public:
virtual void onSimUpdate(int id);
...
Run Code Online (Sandbox Code Playgroud)
在另一个类Select.cpp中
.....
SimData* dat;
dat->onSimUpdate(value1); --->HERE IS THE ERROR THAT IT IS NOT INITIALIZED
.....
Run Code Online (Sandbox Code Playgroud)
你知道我如何在Select.cpp文件中正确调用抽象类吗?
谢谢.
你有一个指向SimData.你需要让它指向一个实例.例如,
SimData* dat;
maintask m;
dat = &m; // dat now points to m
dat->onSimUpdate(value1); // OK now
Run Code Online (Sandbox Code Playgroud)
请注意,调用new maintask()会产生一个指向maintask您可以指定的指针dat.我没有使用那个例子,因为通过指针的动态分配和多态是两个独立的问题.此外,处理原始new指针充满了危险.
这是一个更现实的例子,仍然没有动态分配,甚至没有指针:
void foo(SimData& data, int x) { dat.onSimUpdate(x); }
maintask m;
foo(m, 42);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |