2013-11-26 3 views
0

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

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

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 не нужно включает в себя и станд: :префикс?

+6

Попробуйте изменить на 'std :: size_t'? [size_t info] (http://en.cppreference.com/w/cpp/types/size_t) – crashmstr

+0

Обычно это не проблема для компиляции старой программы с более новой версией GCC (иначе будет Сильнее). Из вашей ошибки видно, что 'size_t' не известен. Для более новых версий это должно быть 'std :: size_t'. Вы можете попробовать объявить typedef для него. –

+0

Да, все ошибки были связаны с отсутствием включений или (например, crashmstr написал) отсутствующий std :: prefix. В старой версии не нужно было добавлять std ::? Как он может работать в старой версии gcc без std :: или включает? – Karlvonbahnhof

ответ

0

Пробег: specifying the language standard для gcc. Я предлагаю вам попробовать

-std=g++11 

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

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

+0

К сожалению, я пробовал все возможности -std = C++, но ничего не работает. Добавляйте только std :: prefix и некоторые #include. – Karlvonbahnhof

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