我正在使用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。
感谢任何想法!
答案 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开始发布以来,从未允许对字符串进行修改。