Tcl_CreateCommand无效的类型转换

时间:2016-01-12 18:40:36

标签: c++ tcl

我正在使用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);


}

但我收到错误&gt;

[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);

我alreadz知道它是c代码,我在命令行中使用-fpermissive&gt;

CC=gcc
CFLAGS=-c -Wall -fpermissive 

但它似乎无法奏效。我正在使用gcc 5.2。

感谢任何想法!

1 个答案:

答案 0 :(得分:0)

问题在于声明:

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开始发布以来,从未允许对字符串进行修改。