【发布时间】:2012-04-20 17:44:48
【问题描述】:
我有以下类:Container、Element,然后是几个从 Element继承 的类,例如。 按钮、输入法等...
将元素添加到 Container 数组时出现问题,我的 main() 如下所示:
Container c;
c.Add( Button(...) );
c.Add( Input(...) );
其中“...”是一些构造函数参数。
在容器类中,我有一个指针数组来存储属于该容器的所有元素:
Element ** elements;
但我遇到的问题是如何实现 Add 方法,我希望这样的事情能奏效:
void Add(const CControl & newElement){
elements[elemCnt++] = &newElement;
}
(分配元素数组:elements = new Element * [100];)
但是我得到了这个编译错误:
main.cpp: In member function ‘Container& Container::Add(const Element&)’:
main.cpp:138:23: error: invalid conversion from ‘const Element*’ to ‘Element*’
当我删除 const 限定符时,我收到一个编译错误,提示没有合适的候选者。
问题是,我是 C++ 中的多态性和继承的新手,所以我可能会走错路。最好的方法是什么?
PS: main 方法必须看起来一样,也不建议任何vector或STL的东西。
【问题讨论】:
-
使用 STL 有什么问题?为什么不想用???它让生活变得如此轻松
-
您在这里犯了一个重大错误,那就是使用 临时 变量的地址并将其存储起来。
Add的参数只是临时的,调用结束后对象将被销毁。除此之外,我同意@TonyTheLion,为什么不使用非常好的标准容器? -
大概就是这样,我需要复制元素并存储动态分配的副本的地址。我不能使用 STL,因为它是在没有 STL 的环境中测试的分配。
-
投票关闭,因为过于本地化。 “无法更改
main”是一个过于本地化的要求。 -
调用函数(const type &something)是否过于本地化?这是问题的重点。
标签: c++ arrays inheritance pointers polymorphism