我正在尝试读取输入的名称,将其保存在动态结构中,最后添加一个数字并计算它。我设法做了第一部分,但我似乎无法将结构地址传递给应该计数的函数,也不能使函数工作。
struct ime_dadoteke
{
unsigned char *ime;
unsigned char velikost;
//this is the struct im working with
};
这是主要的:
struct ime_dadoteke *ime;
ime = ime_init();
int i=1;
do
{
naslednje_ime(ime, i); /*here is the problem with passing the
address. I also tried &ime with parameter
struct ime_dodoteke **ptr.
I get error cannot convert argument 1
from 'ime_dadoteke *' to 'ime_dodoteke *' */
i++;
} while (i <= st_korakov);
这是第一个有效的功能:
struct ime_dadoteke* ime_init()
{
int i;
struct ime_dadoteke *rtn = (struct ime_dadoteke*)malloc(sizeof(struct ime_dadoteke));
printf_s("Vnesi ime slike.\n");
rtn->ime =(unsigned char*)malloc(sizeof(unsigned char));
for (i=0; rtn->ime[i-1]!=10; i++)
{
scanf("%c", &rtn->ime[i]);
rtn->ime = (unsigned char*)realloc(rtn->ime, (i+2)*sizeof(unsigned char));
};
rtn->ime[i]='\0';
rtn->velikost = i;
fseek(stdin, 0, SEEK_END);
return rtn;
};
这是函数的骨架,应该计算名称末尾的数字。我还没有构建它因为我遇到了问题:不允许指向不完整的类。
void naslednje_ime(struct ime_dodoteke *ptr, int i)
{
struct ime_dadoteke *ime = ptr;
ptr /*ptr is underlined (error) */->ime[ptr /*ptr is underlined (error) */->velikost - 1] = '0';
};
另请注意,我创建了大小为string的结构,因为strlen()并不想采用非const char。有办法解决这个问题吗?
答案 0 :(得分:1)
错误消息pointer to incomplete class is not allowed
表示结构(您告诉我们引用错误消息的struct ime_dadoteke
引用错误消息的成员)未在源代理单元{{{ 1}}已定义。您需要将结构定义放在头文件中,并将其包含在您使用它的任何位置,也可以放在您定义struct ime_dadoteke *ptr
的文件中。