无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象

Cannot initialize a member subobject of type 'char *' with an lvalue of type 'const char *'

本文关键字:char 类型 初始化 对象 成员 const      更新时间:2023-10-16

>我有以下内容:

数据.hpp

#include <stdio.h>
class Data{
private:
char* input_filename;
char* csv_filename;
public:
Data(const char* in_filename,const char* out_csv="output.csv");
};
#endif /* data_hpp */

data.cpp

#include "data.hpp"
Data::Data(const char* in_filename,const char* out_csv): input_filename(in_filename), output_csv(out_csv)
{}

我收到错误:

Cannot initialize a member subobject of type 'char *' with an lvalue of type 'const char *'

如何初始化在构造函数中传递的两个字符数组?

char*是一个"指向非常量char的指针"。

const char*是"指向常量char的指针"。

你不能将const char*分配给char*,这是编译器抱怨的。 因此,您必须:

  • char*成员更改为const char*
class Data{
private:
const char* input_filename;
const char* csv_filename;
public:
Data(const char* in_filename, const char* out_csv = "output.csv");
};
#include "data.hpp"
Data::Data(const char* in_filename, const char* out_csv):
input_filename(in_filename), csv_filename(out_csv)
{}
  • char*成员更改为std::string
#include <string>
class Data{
private:
std::string input_filename;
std::string csv_filename;
public:
Data(const char* in_filename, const char* out_csv = "output.csv");
/* you can optionally change the constructor parameters to std::string, too...
Data(const std::string &in_filename, const std::string &out_csv = "output.csv");
*/
};
#include "data.hpp"
Data::Data(const char* in_filename, const char* out_csv):
input_filename(in_filename), csv_filename(out_csv)
{}
/* or:
Data::Data(const std::string &in_filename, const std::string &out_csv):
input_filename(in_filename), csv_filename(out_csv)
{}
*/
相关文章: