编译错误:提升

时间:2014-06-12 15:30:57

标签: c++ boost

我使用sudo apt-get install libboost-all-dev在Ubuntu 14.04上安装了boost。

如果我想用这个命令编译给定的程序

g++ -o prog givenProgram.cpp -I/usr/include/boost -L/usr/lib/x86_64-linux-gnu -lboost_serialization -lboost_random

,我收到了很多错误。

In file included from     ./include/pso.h:15:0,
             from givenProgram.cpp:1:
./include/particle.h:29:17: error: ‘boost’ is not a namespace-name
using namespace boost;
             ^
./include/particle.h:29:22: error: expected namespace-name before ‘;’ token
using namespace boost;
                  ^
./include/particle.h:58:11: error: ‘shared_ptr’ does not name a type
       shared_ptr<CostFunction> fit_func;        // pointer to a cost function
       ^
./include/particle.h:59:11: error: ‘shared_ptr’ does not name a type
       shared_ptr<RNG> rng;                      // pointer to a random number generator
       ^
./include/particle.h:118:62: error: ‘shared_ptr’ does not name a type
                     Particle ( int, CostFunction*, const shared_ptr<RNG> & );
                                                          ^
./include/particle.h:118:62: error: ISO C++ forbids declaration of ‘parameter’ with no type [-fpermissive]
./include/particle.h:118:72: error: expected ‘,’ or ‘...’ before ‘<’ token
                     Particle ( int, CostFunction*, const shared_ptr<RNG> & );
                                                                    ^
./include/particle.h:119:47: error: ‘shared_ptr’ does not name a type
                     Particle ( int, const shared_ptr<CostFunction> &, const shared_ptr<RNG> & );
                                           ^
./include/particle.h:119:47: error: ISO C++ forbids declaration of ‘parameter’ with no type [-fpermissive]
./include/particle.h:119:57: error: expected ‘,’ or ‘...’ before ‘<’ token
                     Particle ( int, const shared_ptr<CostFunction> &, const shared_ptr<RNG> & );
                                                     ^

1 个答案:

答案 0 :(得分:3)

简介

您传递给g++的命令行选项与发出的诊断无关,因为您指定了查找标题的位置以及它应链接到的对象;你没有明确说明应该在哪里找到 boost :: shared_ptr 的定义。

问题是你在没有正确定义所述命名空间的情况下尝试使用 namespace boost ,并且很可能你在 givenProgram.cpp中没有相关的#include s 以便编译器知道您引用的名称。


解决方案

确保您在 之前 中的#include <boost/shared_ptr.hpp>,更具体地说:之前 strong>您尝试使用 boost :: shared_ptr

这种有根据的猜测的原因是你没有发布有关编译器无法找到相关#include的任何错误,它会抱怨,因为它无法找到使用过的名称。