Пора попрощаться с компилятором VC6? - PullRequest
6 голосов
/ 09 апреля 2009

В последнее время я сталкиваюсь с проблемами, которые указывают на компилятор VC6.

Немногие из них:

  1. Функция-try-block не работает. В связи с Q
  2. константа в классе не работает.
  3. __ FUNCTION_ (макрос для получения имени функции) не работает
  4. Последнее добавление - , оно не позволяет передавать пустые функции как часть for_each.

Приведенный ниже пример не компилируется с помощью компилятора VC6. Там написано "ошибка C2562: функция '()': 'void', возвращающая значение". Похоже, VC6 не нравится, когда void функции передаются в for_each.

class Temp
{
public:
    Temp(int i):m_ii(i)
    {}

    int getI() const
    {
        return m_ii;
    }

    void printWithVoid()
    {
        cout<< "i = "<<m_ii<<endl;

    }
    bool printWithBool()
    {
        cout<< "i = "<<m_ii<<endl;
        return true;
    }
private:
    int m_ii;
};

int main(void) 
{
    std::vector<Temp>  arrTempObjects;

    arrTempObjects.push_back(Temp(0));
    arrTempObjects.push_back(Temp(2));

    //Doesnot work, compiler error 
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithVoid));

    //Works
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithBool));

    return 0;
}

Сталкивались ли вы с какими-либо другими проблемами, связанными с VC6.0. Любой обходной путь для решения этих проблем? Или пора менять компилятор?

Ответы [ 12 ]

0 голосов
/ 09 апреля 2009

Обновляете ли вы ОС в ближайшее время? Когда я исследовал перенос наших приложений на Vista, я обнаружил, что Vista официально не поддерживает ничего до VS 2005 (за исключением VB 6), и имеет длинный список возможных небольших проблем с VS 2005, которые могут вас не покусать , Я рекомендовал отложить до выхода VS 2008 SP1 (т. Е. Когда VS 2008 был действительно пригоден для использования) и сначала выполнить переключение компилятора.

Если проект особенный для нескольких клиентов, которые запускают его на старых машинах NT, вы можете оставить его на VS 6. Если вы продаете его для общего потребления, вам нужно будет сделать в какой-то момент он совместим с Vista (или 7-совместимым, или любым другим), и вам нужно будет обновить его.

0 голосов
/ 09 апреля 2009

По общему правилу новая версия является обновлением и, следовательно, имеет смысл.

Тем не менее! вам нужно выбрать правильное время для этого, исправлено так много ошибок, но вам нужно знать о новых ошибках и отклонениях от стандарта.

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

Возможно, вам придется обновиться, когда вы начнете разрабатывать для Vista, поскольку VC6 не позволяет легко подписывать код, а переадресация не в той форме, которая нравится Vista. (хочу хотя бы VC2K5)

...