如何解决"invalid conversion from 'char' to 'const char*'"

How to solve "invalid conversion from 'char' to 'const char*'"

本文关键字:char const to from conversion 何解决 解决 invalid      更新时间:2023-10-16

这个错误已经出现在无数的帖子中,但由于我对c++的了解有限,我无法将任何建议的解决方案应用于我的问题。我遇到的第一个问题是以下第五个声明:

static void write_cntinfo(ofstream &, const CNTInfo &);
static void write_ctsinfo(ofstream &, const CTSInfo &);
static void write_mctsinfo(ofstream &, const MCTSInfo &);
static void write_nbrcntinfo(ofstream &, const NBRCNTInfo &);
static void read_ldf( const *, int, NumArray &);

哪个错误是:

error: ISO C++ forbids declaration of ‘parameter’ with no type [-fpermissive]
static void read_ldf( const *, int, NumArray &);
^

void compute_cts_stats_ci_bca(const gsl_rng *rng_ptr,
const NumArray &f_na,
const NumArray &o_na,
int b, CTSInfo *&cts_info, int n_cts,
int cts_flag, int rank_flag,
const *tmp_dir) {
error: ISO C++ forbids declaration of ‘tmp_dir’ with no type [-fpermissive]
const *tmp_dir) {
^~~~~~~

但是存在许多"从‘char’到‘const char*’的无效转换"的错误,首先是

for(i=0; i<n_cts; i++) {
prefix << cs_erase << tmp_dir << "/tmp_cts_i_" << i;
cts_i_file[i] = make_temp_file_name(prefix, '');
prefix << cs_erase << tmp_dir << "/tmp_cts_r_" << i;
cts_r_file[i] = make_temp_file_name(prefix, '');
}
error: no match for ‘operator<<’ (operand types are ‘ConcatString’ and ‘const int*’)
prefix << cs_erase << tmp_dir << "/tmp_cts_i_" << i;
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
error: invalid conversion from ‘const int*’ to ‘char’ [-fpermissive]
prefix << cs_erase << tmp_dir << "/tmp_cts_i_" << i;
^~~~~~~

整个文件可以在这里访问

https://drive.google.com/open?id=1qj-WvNZUimVpxYOTYjgYVErRp1-GG0te (https://drive.google.com/drive/my-drive).

任何协助都将不胜感激。

首先,我必须提到,我对c++的了解几乎为零。其次,该程序是用于编译软件的程序的一部分。我不知道它在做什么,只是我在编译软件的过程中确实遇到了错误。错误"从'char'到'const-char*'的无效转换"突出显示,但仅出现在"error:ISO C++禁止声明没有类型[-fpermission]的'parameter'"之后。多亏了@Daltenwolf的指导,我才得以消除这两个错误。我现在不得不面对错误:

compute_ci.cc:347:51: error: expected primary-expression before ‘char’
cts_i_file[i] = make_temp_file_name(prefix, char'');

它出现在几行上。"char'\0'"中的"char"是我添加的。

我在几行中遇到的另一个错误是

compute_ci.cc: In function ‘void write_cntinfo(std::ofstream&, const CNTInfo&)’:
compute_ci.cc:3832:4: error: ‘line’ was not declared in this scope
line[max_line_len];
^~~~

我非常感谢达尔滕沃夫。

编译器错误消息实际上是在告诉你问题出在哪里:

static void read_ldf( const *, int, NumArray &);
^^^^^^^^

那里少了一些东西。const是一个类型限定符,用于修改它的所写的内容(除非const是语句的第一个标记,那么它会向移动(。

*的意思是"让它成为一个指针"。

但也缺少了一些东西:整件事所涉及的实际类型。如果没有类型,语句的其余部分就没有意义。不幸的是,我们甚至无法猜测在那里使用的正确类型。


其他错误消息也与类型有关。有些东西(在你的例子中是operator <<(需要一个char const *(这是字符串在C中通常传递的类型;也经常是C++,但在C++中你真的应该使用std::string(,但无论你在那里写了什么,都只给出一个char,即一个字符,根据语言规则,它的行为也像整数。事实上,char是通常具有最少比特的整数类型。


这两个问题都可以通过确保类型正确匹配来解决。我的意思并不是要对它进行打字,而是要确保你试图组合在一起的片段实际上是匹配的。

从编译器错误消息中可以清楚地看到错误:

error: ISO C++ forbids declaration of ‘parameter’ with no type

事实上,parameter没有类型。你错过了这里的char吗?

static void read_ldf( const char*, int, NumArray &);

其他函数也是如此,所有其他错误都源于此缺失的类型(因为该类型将默认为int(。