2015-06-04 6 views
2

У меня возникли проблемы с получением моего компилятора (g ++) для включения определенных файлов заголовков из библиотек ускорения C++, которые находятся в подкаталоге моего каталога bin. В частности, я пытаюсь включить файл заголовка рационального класса, rational.hpp. Сначала я попытался в том числе с помощью этого скриптового кода в моем Makefile:Ошибка, возникающая из Boost Rational

intRational.o: intRational.h 
    g++ -I /home/.../boost_1_58_0 -c intRational.h 

Однако, это дает мне эту ошибку:

In file included from testRational.cpp:11:0: 
intRational.h:17:1: error: expected class-name before ‘{’ token 
{ 
^ 
make: *** [testRational.o] Error 1 

Это intRational.h:

#ifndef _INTRATIONAL_H 
#define _INTRATIONAL_H 

#include<boost/rational.hpp> 
//Derived class 
class intRational: public rational 
{ 
    bool simplify; 
    public: 
    void setSimple() 
    { 
     simplify=true; 
    }; 
    void setNoSimplify() 
    { 
     simplify=false; 
    }; 
    bool getFlag() 
    { 
     return simplify; 
    }; 
}; 


#endif // _INTRATIONAL_H 

Далее я заменил

#include<boost/rational.hpp> 

Wi го полного каталога

#include</home/.../boost_1_58_0/boost/rational.hpp> 

(... представляет собой часть каталога, которая показывает мою личность)

Это зафиксировала первую проблему, но теперь у меня есть новая ошибка:

In file included from intRational.h:14:0, 
       from testRational.cpp:11: 
/home/.../boost_1_58_0/boost/rational.hpp:82:78: fatal error: boost/integer/common_factor_rt.hpp: No such file or directory 
#include <boost/integer/common_factor_rt.hpp> // for boost::integer::gcd, lcm 

Эта ошибка возникает из файла библиотеки boost, rational.hpp. Я не хочу, чтобы поставить полный каталог в #include, потому что тогда мне придется сделать это для #include, которые находятся в заголовочных файлах, на которые ссылается common_factor_rt.hpp, например, и каждый заголовок файл вниз, что много работы. Я не должен этого делать, потому что это отчасти поражает цель использования библиотек.

+1

Обычно вы не хотите компилировать заголовочные файлы, см. Http: //stackoverflow.com/questions/333889/why-have-header-files-and-cpp-files-in-c? S = 2 | 4.5908 – sehe

ответ

3

Похоже, вы хотите целое рациональное:

  • указать параметр шаблона для rational<>
  • квалификацию базового класса с пространством имен (это в boost)
  • OT: вы обычно не компилировать файлы заголовков: Why have header files and .cpp files in C++?
#include <boost/rational.hpp> 

// Derived class 
class intRational : public boost::rational<int> { 
    bool simplify; 

    public: 
    void setSimple()  { simplify = true; } ; 
    void setNoSimplify() { simplify = false; } ; 
    bool getFlag()  { return simplify; } ; 
}; 
+0

Сладкий, он действительно работает. – user3273814

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