Tcl_CreateCommand的类型转换无效
Tcl_CreateCommand invalid type conversion
我正在使用TCL.h创建一个新的TCL命令,代码如下:
#include <tcl.h>
#include <iostream>
using namespace std;
int saludo (ClientData clientData,Tcl_Interp *interp, int argc,char *argv[])
{cout << "Hello World";}
int main(int argc, char *argv[]) {
Tcl_Interp *interp;
interp = Tcl_CreateInterp();
Tcl_CreateCommand(interp, "sal", saludo, ClientData(NULL), (Tcl_CmdDeleteProc *)NULL);
}
但我得到错误>
[arch@myLinux tcl_interpreter]$ make
g++ -c -o interpreter.o interpreter.cc
interpreter.cc: In Funktion »int main(int, char**)«:
interpreter.cc:24:87: Fehler: ungültige Umwandlung von »const char (*)(ClientData, Tcl_Interp*, int, char**) {aka const char (*)(void*, Tcl_Interp*, int, char**)}« in »int (*)(ClientData, Tcl_Interp*, int, const char**) {aka int (*)(void*, Tcl_Interp*, int, const char**)}« [-fpermissive]
Tcl_CreateCommand(interp, "sal", saludo, ClientData(NULL), (Tcl_CmdDeleteProc *)NULL);
我已经知道这是c代码,我在命令行>中使用-fpermission
CC=gcc
CFLAGS=-c -Wall -fpermissive
但它似乎不起作用。我使用的是gcc 5.2。
有什么想法,谢谢!
问题在于声明:
int saludo (ClientData clientData,Tcl_Interp *interp, int argc,char *argv[])
这不是const
的正确版本。您需要使用:
int saludo (ClientData clientData,Tcl_Interp *interp, int argc,const char *argv[])
这是因为将被传递到代码中的字符串不能被函数修改(因为代码的其他部分会观察到这些字符串,并认为它们不会被修改)。请注意,Tcl的旧版本可能不需要const
正确,但这是API描述的错误(多年前);自从8.0以后,字符串就再也不允许修改了。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++无效的函数类型转换
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- 从类型"void*"到函数指针的强制转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- 将前向声明的类型转换为无效是否合法?
- 相同类型之间的转换无效
- 移动语义:从"类型&&"到"类型"的转换无效。模板:将未知参数传递给重载函数
- C++从类型“void*”转换为类型“double”无效
- 类型转换无效指针指向无符号短整型
- 视窗 - FMX - 无效的类类型转换C++
- Tcl_CreateCommand的类型转换无效
- 从类型 'MyStruct' 转换为类型 'void*' 无效
- 从“char*”到“char”[-fpermissive]的转换无效,数组下标的类型“char[int]”无效
- 从类型"浮点数"到类型"浮点数*"的转换无效
- 指针算术编译失败,gcc指出类型转换无效
- 使用虚函数协变返回类型的c++无效转换错误
- 使用 static_cast 进行无效的类型转换,我应该使用什么正确的转换