鱼C论坛

 找回密码
 立即注册
查看: 1817|回复: 10

[已解决]新人C++问题求助

[复制链接]
发表于 2018-10-7 09:44:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,在定义结构体时遇到了一些问题,错误提示时error: 'void init(<anonymous struct>*)', declared using anonymous type, is used but never defined [-fpermissive]|
最佳答案
2018-10-7 18:06:12
°希作先生丶 发表于 2018-10-7 17:52
我知道怎么声明普通的结构体,就是想问一下这样声明为什么无法通过
#include <iostream>

typedef struct data
{
        int id;
        char *name;
}Data;

typedef struct staticlinkedlist
{
        Data dt;
        int Cnext;
}StaticLinkedList[10];

void init(StaticLinkedList tar)
{
        for(int i = 0; i < 0; i++)
                tar[i].Cnext = i+1;
        tar[8].Cnext = 0;
        tar[9].Cnext = 0;
}

void Show(StaticLinkedList tar)
{
        for(int i = 0; i < 10; i++)
                std::cout << tar[i].Cnext << std::endl;
}

int main()
{
        StaticLinkedList s1;
        init(s1);
        return 0;
}
都说了没有结构体名~~~ 然后 struct xxx -> typedef struct xxx XXX 不要用相同的名字

定义结构体时直接声明为数组形式

定义结构体时直接声明为数组形式

作为参数传给函数的时候就传不进去

作为参数传给函数的时候就传不进去

函数顶底

函数顶底
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-7 12:18:09 From FishC Mobile | 显示全部楼层
typedef struct xxx{   }结构体变量;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 17:52:57 | 显示全部楼层
claws0n 发表于 2018-10-7 12:18
typedef struct xxx{   }结构体变量;

我知道怎么声明普通的结构体,就是想问一下这样声明为什么无法通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 18:06:12 | 显示全部楼层    本楼为最佳答案   
°希作先生丶 发表于 2018-10-7 17:52
我知道怎么声明普通的结构体,就是想问一下这样声明为什么无法通过
#include <iostream>

typedef struct data
{
        int id;
        char *name;
}Data;

typedef struct staticlinkedlist
{
        Data dt;
        int Cnext;
}StaticLinkedList[10];

void init(StaticLinkedList tar)
{
        for(int i = 0; i < 0; i++)
                tar[i].Cnext = i+1;
        tar[8].Cnext = 0;
        tar[9].Cnext = 0;
}

void Show(StaticLinkedList tar)
{
        for(int i = 0; i < 10; i++)
                std::cout << tar[i].Cnext << std::endl;
}

int main()
{
        StaticLinkedList s1;
        init(s1);
        return 0;
}
都说了没有结构体名~~~ 然后 struct xxx -> typedef struct xxx XXX 不要用相同的名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 18:59:20 | 显示全部楼层
claws0n 发表于 2018-10-7 18:06
都说了没有结构体名~~~ 然后 struct xxx -> typedef struct xxx XXX 不要用相同的名字

哦天哪可以了,谢谢老哥,还有点小问题就是data结构声明的时候是两个相同的名字为啥没报错- =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 19:10:30 | 显示全部楼层
°希作先生丶 发表于 2018-10-7 18:59
哦天哪可以了,谢谢老哥,还有点小问题就是data结构声明的时候是两个相同的名字为啥没报错- =

那个还好,主要的是 StaticLinkedList,会与数组元素冲突,所以一般上都避免
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 19:27:46 | 显示全部楼层
claws0n 发表于 2018-10-7 19:10
那个还好,主要的是 StaticLinkedList,会与数组元素冲突,所以一般上都避免

可以详细说一下么,初学者比较笨- =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 19:36:20 | 显示全部楼层
°希作先生丶 发表于 2018-10-7 19:27
可以详细说一下么,初学者比较笨- =

因为你定义了一个结构体变量 StaticLinkedList[10],如果你写 StaticLinkedList,会是这个结构体的首地址,冲突了。
typedef struct xxx {}XXX; 等同
struct xxx{};
typedef struct xxx XXX; //这个还是声明的部分不是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 19:40:25 | 显示全部楼层
claws0n 发表于 2018-10-7 19:36
因为你定义了一个结构体变量 StaticLinkedList[10],如果你写 StaticLinkedList,会是这个结构体的首地址 ...

也就是说下面的XXX时声明而上面的XXX时定义这个意思么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 19:44:03 | 显示全部楼层
°希作先生丶 发表于 2018-10-7 19:40
也就是说下面的XXX时声明而上面的XXX时定义这个意思么

呃,声明是没有内容的
比如说函数的声明
void fun(int);
函数的定义
void fun(int x)
{......}
主要是你声明为结构体数组,那么会同时定义一个结构体数组。尽量避免就对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 19:51:13 | 显示全部楼层
claws0n 发表于 2018-10-7 19:44
呃,声明是没有内容的
比如说函数的声明
void fun(int);

嗯, 大概明白了一点- = 谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 16:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表