2016-08-16 109 views
-1

我最近下载了一个程序。病人具体生存预测CLI,http://pssp.srv.ualberta.ca/如何从.cpp文件和生成文件编译程序

自述包括状态: “1编译 的代码应该在Linux编译没有任何修改进行编译,只需要输入‘使’应该 是2个可执行文件编译后,。 mtlr火车和mtlr测试“。

我下载提取文件夹到我的位置,当我进入该目录,输入make我得到:

[email protected]:/pssp_source$ make 
g++ -c -O3 DenseVector.cpp -o DenseVector.o 
In file included from DenseVector.cpp:1:0: 
DenseVector.h:9:2: error: ‘size_t’ does not name a type 
    size_t m_dim; 
^
DenseVector.h:18:21: error: expected ‘)’ before ‘n’ 
    DenseVector(size_t n); 
        ^
DenseVector.h:26:33: error: ‘size_t’ does not name a type 
    double const& operator[](const size_t i) const 
           ^
DenseVector.h:26:40: error: ISO C++ forbids declaration of ‘i’ with no type [-fpermissive] 
    double const& operator[](const size_t i) const 
             ^
DenseVector.h:31:27: error: ‘size_t’ does not name a type 
    double& operator[](const size_t i) 
         ^
DenseVector.h:31:34: error: ISO C++ forbids declaration of ‘i’ with no type [-fpermissive] 
    double& operator[](const size_t i) 
           ^
DenseVector.h:38:2: error: ‘size_t’ does not name a type 
    size_t dim() const 
^
DenseVector.h: In member function ‘void DenseVector::push_back(double)’: 
DenseVector.h:23:3: error: ‘m_dim’ was not declared in this scope 
    m_dim++; 
^
DenseVector.cpp: At global scope: 
DenseVector.cpp:6:1: error: prototype for ‘DenseVector::DenseVector(size_t)’ does not match any in class ‘DenseVector’ 
DenseVector::DenseVector(size_t n): m_dim(n) 
^ 
In file included from DenseVector.cpp:1:0: 
DenseVector.h:5:7: error: candidates are: DenseVector::DenseVector(const DenseVector&) 
class DenseVector 
    ^
DenseVector.h:12:2: error:     DenseVector::DenseVector() 
    DenseVector(void); 
^
DenseVector.cpp: In constructor ‘DenseVector::DenseVector()’: 
DenseVector.cpp:16:2: error: class ‘DenseVector’ does not have any field named ‘m_dim’ 
:m_dim(0) 
^
DenseVector.cpp: In member function ‘void DenseVector::clear()’: 
DenseVector.cpp:27:22: error: ‘m_dim’ was not declared in this scope 
    for (size_t i=0; i<m_dim; i++) 
        ^
In file included from /usr/include/c++/4.8/cassert:43:0, 
       from DenseVector.cpp:3: 
DenseVector.cpp: In function ‘double sprod_nn(const DenseVector&, const DenseVector&)’: 
DenseVector.cpp:37:11: error: ‘const class DenseVector’ has no member named ‘dim’ 
    assert(a.dim() == b.dim()); 
     ^
DenseVector.cpp:37:22: error: ‘const class DenseVector’ has no member named ‘dim’ 
    assert(a.dim() == b.dim()); 
        ^
DenseVector.cpp:38:15: error: ‘const class DenseVector’ has no member named ‘dim’ 
    size_t n = a.dim(); 
      ^
In file included from /usr/include/c++/4.8/cassert:43:0, 
       from DenseVector.cpp:3: 
DenseVector.cpp: In function ‘void multadd_nn(DenseVector&, const DenseVector&, double)’: 
DenseVector.cpp:49:11: error: ‘class DenseVector’ has no member named ‘dim’ 
    assert(w.dim()==a.dim()); 
     ^
DenseVector.cpp:49:20: error: ‘const class DenseVector’ has no member named ‘dim’ 
    assert(w.dim()==a.dim()); 
        ^
DenseVector.cpp:50:15: error: ‘class DenseVector’ has no member named ‘dim’ 
    size_t n = w.dim(); 
      ^
DenseVector.cpp: In function ‘void smult_n(DenseVector&, double)’: 
DenseVector.cpp:62:15: error: ‘class DenseVector’ has no member named ‘dim’ 
    size_t n = w.dim(); 
      ^
make: *** [DenseVector.o] Error 1 

该文件夹的内容是这样的:

[email protected]:/pssp_source$ ls 
common.cpp data_type_api.h DenseVector.h Main.cpp Makefile Sparm.cpp Sparm.o   SparseVector.h test_model.mltr Util.h 
common.h DenseVector.cpp example_data Main.o readme.pdf Sparm.h SparseVector.cpp Test.cpp  test_model.mlty 

我看着了解编译C++代码所需的基本包,以及如何运行它的基础知识以及没有任何东西让我知道这个问题。它看起来像size_t没有类型有问题。

DenseVector.cpp的起点是:

#include "DenseVector.h" 

#include <cassert> 
#include <iostream> 

DenseVector::DenseVector(size_t n): m_dim(n) 
{ 
    m_dvector.reserve(n); 
    for (size_t i=0; i<n; i++) 
    { 
      m_dvector.push_back(0); 
    } 
} 

我从来没有编这样的代码之前,所以我可能失去了一些东西明显。如果需要它,我正在运行ubuntu 14.04,g ++版本是 4.8.4。

谢谢

+0

'size_t'是'std'的成员。你需要'std :: size_t'。 – NathanOliver

+0

['size_t'](http://en.cppreference.com/w/cpp/types/size_t)来自'',并且需要'std ::'命名空间 – CoryKramer

+1

[size_t不能被g ++找到 - 4.1或其他在Ubuntu 8.1上](http://stackoverflow.com/questions/1107940/size-t-can-not-be-found-by-g-4-1-or-others-on-ubuntu-8- 1) –

回答

0

听起来像自述文件撒谎。可能它碰巧与不同版本的标准库一起工作。

尝试增加

#include <stddef.h> 

附近DenseVector.h的顶部。

+0

完美运作。谢谢 – slips

+0

@slips [如何接受答案的工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

0

打开文件DenseVector.h在程序的根目录下,并修改它,将

#pragma once 

#include <vector> 
#include <cstddef> // <--- Add this line to the file 

class DenseVector 
{ 
    protected: 
// ... 

保存它,然后重试!

+0

这将把'size_t' 'std ::' - 所以它不会被找到。 –

0

我不认为你使用的是正确版本的C;我认为你需要C11。而不是使用-03标志,请使用-11-std=c11。然后重新编译它。