2013-10-15 522 views
1

我在模仿另一个文件中的用法的特定行上收到错误。错误:期望的声明说明符或'...'在字符串常量之前

PyObject *pyCharGetHeight(PyChar *self, void *closure) { 
    CHAR_DATA *ch = PyChar_AsChar((PyObject *)self); 
    PyObject *height = NULL; 
    if(ch != NULL) height = Py_BuildValue("s", charGetHeight(ch)); 
    return height; 
} 

PyChar_addGetSetter("height", pyCharGetHeight, NULL, "Returns character's height"); 

将返回下面的错误,PyChar_addGetSetter ...线

error: expected declaration specifiers or â...â before string constant

我使用下面包括:

#include <Python.h> 
#include "../scripts/pychar.h" 

而且pychar.h确实定义PyChar_addGetSetter()为原型这里:

void PyChar_addGetSetter(const char *name, void *g, void *s, const char *doc); 

功能是写在../scripts/pychar.c如下:

void PyChar_addGetSetter(const char *name, void *g, void *s, const char *doc) { 
    // make sure our list of get/setters is created 
    if(pychar_getsetters == NULL) pychar_getsetters = newList(); 

    // make the GetSetter def 
    PyGetSetDef *def = calloc(1, sizeof(PyGetSetDef)); 
    def->name  = strdup(name); 
    def->get   = (getter)g; 
    def->set   = (setter)s; 
    def->doc   = (doc ? strdup(doc) : NULL); 
    def->closure  = NULL; 
    listPut(pychar_getsetters, def); 
} 

这似乎是一个结构或类型不被认可,我猜我的功能。

+0

'PyChar_addGetSetter'不是来自C API的函数,所以...它来自哪里?如果它是你自己编写的函数(可能在''/ scripts/pychar.h“文件中),那么你必须向我们展示该函数的源代码,而不仅仅是调用代码和原型。 (例如,错误可能很容易就是'CHAR_DATA'是一个带有流浪的东西的宏。) – abarnert

+0

@abarnert这个错误不会出现在pychar.c文件中,只会发生PyChar_addGetSetter(“高度“,pyCharGetHeight,NULL,”返回字符的高度“);'包含在内,这在其他地方使用时没有错误。最值得注意的是在pychar.c – ToothlessRebel

回答

3

它看起来像你试图调用一个.c文件顶级的函数。你不能那样做。

错误信息可能稍微好一点,但它看起来像gcc将此解释为尝试声明名为PyChar_addGetSetter的类型和/或声明该类型的全局变量,并且无法以任何方式解释它,并告诉你为什么这种尝试失败。

+0

在顶层?你能更清楚地回答你的第一行吗?它确实看起来像是试图声明一个类型,但它应该在头文件中声明。 – ToothlessRebel

+0

哦!哇,是的,“打电话”你是绝对正确的。谢谢! – ToothlessRebel

+0

@ToothlessRebel:你还需要我澄清第一句话吗? – abarnert

相关问题