标题几乎说明了一切。我有一个构造函数
Brain::Synapse::Synapse(Neuron *new_neuron);
但是当我传递一个不正确的类型(来自这样的矢量的成员)
std::vector<Motor_Neuron*> neurons;
Synapse *new_synapse = new Synapse(neurons[neuron_index]);
它运作得很好(这就是问题所在)。 Motor_Neuron
是来自Neuron
的派生类,所以我怀疑这就是原因。我的问题最终是我需要将一些Synapse
连接到Neuron
s,将其他Motor_Neuron
连接到Synapse
s。 Incident Identifier: 19B778C7-623F-40D4-871E-EDF3C16240DB
CrashReporter Key: TODO
Hardware Model: iPhone6,2
Version: 8.2.2 (1814)
Code Type: ARM-64
Parent Process: launchd [1]
Date/Time: 2017-07-02 14:41:07 +0000
OS Version: iPhone OS 8.3 (12F70)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x10
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib objc_msgSend + 16
1 UIKit -[UINavigationController _customTransitionController:] + 320
2 UIKit _popViewControllerNormal + 412
3 UIKit -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 644
4 UIKit -[UINavigationController popViewControllerAnimated:] + 572
5 METDyldCollection -[UINavigationController(KMNavigationBarTransition) km_popViewControllerAnimated:] (UINavigationController+KMNavigationBarTransition.m:94)
6 imeituan -[UINavigationController(HTKPushPopHook) pushpop_hook_popViewControllerAnimated:] (UINavigationController+HTKPushPopHook.m:50)
7 METDyldCollection __67-[SAKTransitionSafeNavigationController popViewControllerAnimated:]_block_invoke (SAKTransitionSafeNavigationController.m:75)
8 METDyldCollection -[SAKTransitionSafeNavigationController addTransitionBlock:] (SAKTransitionSafeNavigationController.m:167)
9 METDyldCollection -[SAKTransitionSafeNavigationController popViewControllerAnimated:] (SAKTransitionSafeNavigationController.m:73)
10 METDyldCollection -[MLNavigationController popViewControllerAnimated:] (MLNavigationController.m:51)
类的成员是指向&#34;连接的神经元&#34;的指针。我一直试图重载构造函数,但我认为这不会起作用,因为如果其中一个构造函数接受了错误的类型,我就不会看到如何选择正确的构造函数。
答案 0 :(得分:2)
如果Motor_Neuron
继承自Neuron
,则其类型不正确。这是继承的全部基础;继承的类是他们的父类,只是添加了一些额外的部分。
听起来您需要处理应用程序的类层次结构。 SOLID 原则是很好的指导原则。相关的一个是 Liskov替换原则,其中指出“程序中的对象应该可以替换其子类型的实例,而不会改变该程序的正确性。”如果您的Motor_Neuron
无法填写Neuron
的角色,那么它不应该继承它。如果需要利用Neuron
中的某些功能,可能会将Neuron
作为成员并从中使用其功能。
有创建Motor_Neuron
构造函数并删除它或抛出异常的解决方法,但我并不是很容易尝试修复这样的症状,而是转向源代码;你的设计。