Ну в принципе вот что мне нужно
extern
(Аль) char *
переменнаяКод:
import std.stdio;
import std.string;
import core.stdc.stdlib;
extern (C) int yyparse();
extern (C) extern __gshared FILE* yyin;
extern (C) extern __gshared char* yyfilename;
void main(string[] args)
{
string filename = args[1];
auto file = File(filename, "r");
yyfilename = toStringz(filename);
yyin = file.getFP();
yyparse();
}
Тем не менее toStringz
функция возвращает эту ошибку:
main.d(15): Error: cannot implicitly convert expression (toStringz(filename)) of type immutable(char)* to char*
Есть идеи, что не так?
Проблема в том, что yyfilename
и возвращаемое значение toStringz
когда передается строка, есть разные квалификаторы const. filename
неизменен (D string
псевдоним immutable(char)[]
), тем не мение yyfilename
не имеет какого-либо const-квалификатора и поэтому является изменяемым.
У вас есть два варианта:
yyfilename
не будет изменено в другом месте вашей программы, вы должны объявить его как const(char)*
вместо char*
,filename
при конвертации: toUTFz!(char*)(filename)
,Ты можешь использовать:
import std.utf;
void main()
{
string filename;
char* yyfilename;
yyfilename = toUTFz!(char*)(filename);
// yyfilename = filename.toUTFz!(char*); // or with UFCS syntax
}