[英]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.