【问题标题】:Tcl_CreateCommand invalid type conversionTcl_CreateCommand 无效类型转换
【发布时间】:2016-01-12 18:40:35
【问题描述】:

我正在使用 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 代码,我在命令行中使用 -fpermissive>

CC=gcc
CFLAGS=-c -Wall -fpermissive 

但它似乎不起作用。我正在使用 gcc 5.2。

任何想法谢谢!

【问题讨论】:

    标签: c++ tcl


    【解决方案1】:

    问题在于声明:

    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 版本开始,就不允许修改字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2012-11-19
      • 2011-10-05
      相关资源
      最近更新 更多