簡體   English   中英

我在使用帶有參數的構造函數創建 class 時收到錯誤“預期標識符”

[英]I receive the error “expected an identifier” while creating a class with a constructor which takes parameters

您將在下面找到我的代碼。 首先我介紹 header 文件,然后是相應的 cpp 文件。 我收到的錯誤是在構造函數的行上,並聲明“需要一個標識符”,我到處搜索以找到這個錯誤,但我被卡住了。 還值得注意的是,我對 c++ 中的課程還不滿意。

header 文件:

#include <Eigen/Core>
#ifndef RIDGE_GD
#define RIDGE_GD


class RIDGE_GD
{
public:
    RIDGE_GD(double lambda, double eta, double max_iter);
    void fit(Eigen::MatrixXd X, Eigen::MatrixXd y);
    double error();

    Eigen::MatrixXd cost_grad();
    void gd_step();
    Eigen::MatrixXd X;
    Eigen::MatrixXd y;
    Eigen::MatrixXd w;

private:
    double m_lambda;
    double m_eta;
    double m_max_iter;

};


#endif

對應的cpp文件:

    #include "RIDGE_GD.h"
    #include <Eigen/Core>
    
    RIDGE_GD::RIDGE_GD(double lambda, double eta, double max_iter)
    {
        m_lambda = lambda;
        m_eta = eta;
        m_max_iter = max_iter;


    }
    

    
    Eigen::MatrixXd RIDGE_GD::cost_grad(RIDGE_GD.X, RIDGE_GD.y, RIDGE_GD.w, RIDGE_GD.lambda) {};
    void RIDGE_GD::gd_step()
    {
    }
    
    
    void RIDGE_GD::fit(Eigen::MatrixXd X, Eigen::MatrixXd y)
    {}
    double RIDGE_GD::error()
    {}

您的包含保護使用與您的 class 名稱相同的標識符。 所以RIDGE_GD的所有實例都被替換為空。 編譯器將您的 class 視為

class {
public:
    (double lambda, double eta, double max_iter);
    // ...
};

這就是您收到錯誤的原因。

為包含防護使用不同的標識符。 (或更改您的 class 的名稱。)

header 保護是錯誤的,它將 class 名稱更改為空:

#ifndef RIDGE_GD
#define RIDGE_GD
^^ This line changes `class RIDGE_GD` to `class `, as RIDGE_GD is defined to be empty

而是使用適當的 header 防護:

#ifndef RIDGE_GD_HEADER_INCLUDED
#define RIDGE_GD_HEADER_INCLUDED

...

#endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM