如何解决"invalid conversion from 'char' to 'const char*'"
How to solve "invalid conversion from 'char' to 'const char*'"
这个错误已经出现在无数的帖子中,但由于我对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
(。
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*