2013-11-19 3 views
1

В следующем фрагменте кода деструктор класса TdcTestResult вызывается в конце функции add, и поэтому переменная метода mTdcTestResults снова станет пустой.Объект не сохраняется

Как я могу сделать экземпляр TdcTestResult внутри mTdcTestResults persistent?

classdef Tdc 

    properties % (Access = private) 
     mTestRun  = TdcTestRun; 
     mTestResults = []; 
    end 

    methods(Access = public) 

     function add(obj, componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason) 
      if(nargin > 0) 
       obj.mTestResults = [obj.mTestResults TdcTestResult]; 
       obj.mTestResults(end).set(componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason); 

       obj.mTestRun.addTestResult(obj.mTestResults(end)); 
      end 
     end 
    end 
end 
+0

В приведенном выше коде, вы имеете в виду 'mTestResults' вместо' mTdcTestResults'? – chappjc

ответ

0

Я думаю, что фактическая проблема заключается в том, что вы фактически не меняете obj. Если вы хотите, ссылка на новый TdcTestResult внутри mTestResults должна препятствовать вызову деструктора.

Это связано с ответом Даниала АиР: Если вы не реализуете Tdc как handle подкласса, ваш метод add должен вернуть измененный obj. В противном случае сменились изменения в add.

Таким образом, вы должны либо вернуть obj и изменить призывающую синтаксис

tdcObject = tdcObject.add(...); 

или наследовать от handle - что, вероятно, лучшей альтернативой.

0

TdcTestResult необходимо handle быть суперкласс, в противном случае ваш код не может работать. Более подробная информация находится в файле documentation

Если это не помогает, укажите пример исполняемого кода.

Смежные вопросы