这个错误已经出现在无数的帖子中,但是由于我对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, '\0');
prefix << cs_erase << tmp_dir << "/tmp_cts_r_" << i;
cts_r_file[i] = make_temp_file_name(prefix, '\0');
}
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 *'的无效转换”明显出现,但仅在“错误:ISO C ++禁止声明没有类型[-fpermissive]的'parameter'之后出现。感谢@Daltenwolf提供的指导,我已经能够消除这两个错误。 我现在必须解决该错误:
compute_ci.cc:347:51: error: expected primary-expression before ‘char’
cts_i_file[i] = make_temp_file_name(prefix, char'\0');
出现在多行上。我在“ 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];
^~~~
我非常感谢达尔滕沃尔夫。
答案 0 :(得分:1)
该错误很简单,并且可以从编译器错误消息中清除:
error: ISO C++ forbids declaration of ‘parameter’ with no type
确实,parameter
没有类型。您是否在这里错过了char
?
static void read_ldf( const char*, int, NumArray &);
与其他功能相同,所有其他错误均来自此缺失的类型(因为该类型将默认为int
)。
答案 1 :(得分:1)
编译器错误消息实际上是在告诉您确切的问题是什么
static void read_ldf( const *, int, NumArray &);
^^^^^^^^
那里缺少什么。 const
是一种类型限定符,可修改其 left 所写内容(除非const
是语句的第一个标记,然后它会作用于 right < / em>)。
*
的意思是“使其成为指针”。
但是有一些缺失:整个事物所涉及的实际类型。没有类型,语句的其余部分毫无意义。不幸的是,我们甚至无法猜测在那里将使用哪种正确的类型。
另一个错误消息也与类型有关。某种东西(在您的情况下为operator <<
)期望为char const *
(这是通常在C中传递字符串的类型;通常也是C ++,但是在C ++中,您确实应该使用std::string
)但是无论您在那写什么,都只会给出一个char
,即单个字符,根据语言规则,该字符的行为也类似于整数。实际上char
是整数类型,通常位数最少。
通过确保类型正确配合可以解决两个问题。而且,这并不是说要对它进行拍打,而是要确保您尝试组装的零件确实匹配。