Использовать GOTO или нет? [закрытый]

Неустранимая ошибка: [TraitA] и [TraitB] определяют одно и то же свойство ([$ x]) в композиции [ClassC]

Происходит, когда класс пытается use несколько Черты , где две или более из этих признаков имеют , определяют свойство с тем же именем и с свойством, имеющим разные начальные значения.

Пример:

Проблемное: хотя можно разрешить конфликты между конкурирующими методами , в настоящее время нет синтаксиса, который бы разрешил конфликт между двумя конкурирующими свойствами. Единственное решение в это время - refactor ; т.е. избежать конфликта между именами свойств, которые приводят к фатальной ошибке.


Вопросы, относящиеся:

61
задан 6 revs, 5 users 47% 16 May 2016 в 06:46
поделиться

32 ответа

Alien01 записал: В настоящее время я работаю над проектом, где операторы перехода в большой степени используются. Основная цель операторов перехода состоит в том, чтобы иметь один раздел очистки в стандартной программе, а не нескольких операторах возврата.

, Другими словами, Вы хотите разделить логику программы от простых повторяющихся утомительных стандартных программ, как освобождение ресурса, который мог бы быть зарезервированным в различных местоположениях кода.

метод обработки исключений является логикой обработки ошибок, которая работает параллельно с логикой программы. Это - более изящное решение, так как это обеспечивает такое разделение при предложении способности переместить управление в другие блоки кода точно как goto, оператор делает, таким образом, я изменил сценарий для сходства с этим:

class auxNullPtrException : public std::exception {
    public:
        auxNullPtrException::auxNullPtrException()
            : std::exception( " OOM \n") {}
    };

    BOOL foo()
    {
        BOOL bRetVal = FALSE;
        try {
            int *p = NULL;
            p = new int;
            if (p == NULL)
            {
                throw auxNullPtrException();
            }
            // Lot of code...
         }
         catch(auxNullPtrException & _auxNullPtrException)
         {
             std::cerr<<_auxNullPtrException.what();
             if(p)
             {
                 delete p;
                 p = NULL;
             }
         }
         return bRetVal;
    }
0
ответ дан 2 revs, 2 users 67% 24 November 2019 в 16:55
поделиться

Попробуйте его этот путь:

BOOL foo()
{
   BOOL bRetVal = FALSE;
   int *p = NULL;

   p = new int;
   if (p == NULL)
   {
     cout<<" OOM \n";
   }
   else
   {
       // Lot of code...
   }

   if (p)
   {
     delete p;
     p = NULL;
   }
   return bRetVal;
}

В разделе "Lot of code", "Партия кода" является хорошим признаком, что, вероятно, необходимо осуществить рефакторинг этот раздел в один или несколько методов или функций.

0
ответ дан 2 revs, 2 users 87% 24 November 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: