C++ 如何从.cpp文件和makefile编译程序

C++ 如何从.cpp文件和makefile编译程序,c++,ubuntu,compiler-errors,C++,Ubuntu,Compiler Errors,我最近下载了一个程序。患者特异性生存预测CLI 自述文件包括: “1汇编 代码应该在Linux上编译,无需任何修改。要编译,只需键入“make”。应该有 编译、mtlr列车和mtlr测试后,应为2个可执行文件。” 当我进入目录并键入make I get时,我将文件夹中提取的文件下载到我的位置: x@x-laptop:/pssp_source$ make g++ -c -O3 DenseVector.cpp -o DenseVector.o In file included from DenseV

我最近下载了一个程序。患者特异性生存预测CLI

自述文件包括: “1汇编 代码应该在Linux上编译,无需任何修改。要编译,只需键入“make”。应该有 编译、mtlr列车和mtlr测试后,应为2个可执行文件。”

当我进入目录并键入make I get时,我将文件夹中提取的文件下载到我的位置:

x@x-laptop:/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
我查阅了编译C++代码所需的基本包,以及如何运行它的基础知识,没有人能让我克服这个问题。看起来它的大小有问题,但没有类型

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);
  }
}
#包括“DenseVector.h”
#包括
#包括
DenseVector::DenseVector(大小n):m尺寸(n)
{
m_dvector.reserve(n);

对于(size_t i=0;i来说,自述文件听起来像是在撒谎。可能它碰巧与标准库的不同版本一起工作

尝试添加

#include <stddef.h>
#包括

在DenseVector.h顶部附近

打开程序根目录中的文件
DenseVector.h
,然后修改它,插入

#pragma once

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

class DenseVector
{
   protected:
// ...
#pragma一次
#包括

#包括//我认为您没有使用正确版本的
C
;我认为您需要C11。不要使用
-03
标志,而是使用
-11
-std=C11
。然后重新编译。

size\u t
std
的成员。您需要
std::size\u t
std::
namespace@CoryKramer:或者您使用
而不需要
std::
@将
大小放入
std::
的纸条,因此将找不到它。
#pragma once

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

class DenseVector
{
   protected:
// ...