Компиляция программы для старого gcc

0

Я должен скомпилировать программные пробники, но есть много ошибок. В программе readme autor пишет, что программа совместима с gcc 4.3, но у меня только 4.7.2. Есть ли способ скомпилировать эту старую программу? Я не считаю, что в программе есть ошибки, потому что многие серверы биоинформатики используют ее.

Самая странная для меня ошибка:

Description                 Resource         Path       Location    Type

expected ‘) before ‘size  SafeVector.h    /probcons   line 27 C/C++ Problem
expected ‘) before ‘size  SafeVector.h    /probcons   line 26 C/C++ Problem

В классе SafeVector.h:

/////////////////////////////////////////////////////////////////
// SafeVector.h
//
// STL vector with array bounds checking.  To enable bounds
// checking, #define ENABLE_CHECKS.
/////////////////////////////////////////////////////////////////

#ifndef SAFEVECTOR_H
#define SAFEVECTOR_H

#include <cassert>
#include <vector>

/////////////////////////////////////////////////////////////////
// SafeVector
//
// Class derived from the STL std::vector for bounds checking.
/////////////////////////////////////////////////////////////////

template<class TYPE>
class SafeVector : public std::vector<TYPE>{
 public:

  // miscellaneous constructors
  SafeVector() : std::vector<TYPE>() {}
  /*ERROR HERE*/ SafeVector(size_t size) : std::vector<TYPE>(size) {}
  /*ERROR HERE*/ SafeVector(size_t size, const TYPE &value) : std::vector<TYPE>(size, value) {}
  SafeVector(const SafeVector &source) : std::vector<TYPE>(source) {}

#ifdef ENABLE_CHECKS

  // [] array bounds checking
  TYPE &operator[](int index){
    assert (index >= 0 && index < (int) size());
    return std::vector<TYPE>::operator[] ((size_t) index);
  }

  // [] const array bounds checking
  const TYPE &operator[] (int index) const {
    assert (index >= 0 && index < (int) size());
    return std::vector<TYPE>::operator[] ((size_t) index) ;
  }

#endif

};

Как возможно, что в старой версии gcc не нужны и std :: prefix?

  • 6
    Попробуйте перейти на std::size_t ? информация о размере
  • 0
    Обычно это не должно быть проблемой для компиляции старой программы с более новой версией GCC (наоборот будет сложнее). Из вашей ошибки похоже, что size_t не известен. Для более новых версий это должен быть std::size_t . Вы можете попробовать объявить typedef для него.
Показать ещё 2 комментария
Теги:
gcc

1 ответ

0

Попробуйте указать языковой стандарт для gcc. Я предлагаю вам попробовать

-std=g++11

во-первых, я думаю, что это, скорее всего, скомпилирует его. Если он не работает, попробуйте другие варианты.

Как добавить это, зависит от того, как выполняется компиляция, но один "быстрый и грязный" способ заключается в том, чтобы добавить это, чтобы найти make файл, найти строку, которая указывает переменную компилятора переменной CXXFLAGS и добавить ее к ней. Примечание: если это сгенерированный make файл, изменения будут перезаписаны, если вы снова запустите генератор.

  • 0
    К сожалению, я перепробовал все возможности -std = c ++, но ничего не работает. Добавьте только префикс std :: и немного #include.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню