鱼C论坛

 找回密码
 立即注册
查看: 2543|回复: 5

请问为什么错了?

 关闭 [复制链接]
发表于 2014-9-26 09:20:00 | 显示全部楼层 |阅读模式
10鱼币
#include <iostream>
#include <malloc.h>
#include <stdlib.h>

using namespace std;

struct Arr
{
    int* pBase; //存储的是数组第一个元素的地址
    int  len; //数组所能容纳的最大元素的个数
    int  cnt; //当前数组有效元素的个数
};

void init_arr(struct Arr* pArr,int length);
bool append_arr();
bool insert_arr();
bool delete_arr();
int  get();
bool is_empty(struct Arr* pArr);
bool is_full();
void sort_arr();
void show_arr(struct Arr* pArr);
void inversion_arr();

int main()
{
    struct Arr arr;
    init_arr(&arr,6);
    show_arr(&arr);

    return 0;
}

void init_arr(struct Arr* pArr,int length)
{
    pArr->pBase = (int* )malloc(sizeof(int) * length);
    if(NULL == pArr->pBase)
    {
        printf("动态内存分配失败!\n");
        exit(-1); //终止整个程序
    }
    else
    {
        pArr->len = length;
        pArr->cnt = 0;
    }
    return;
}

bool is_empty(struct Arr* pArr)
{
    if(NULL == pArr->cnt)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void show_arr(struct Arr* pArr)
{
    if(is_empty(pArr))  //为什么错了?
    {
        printf("数组为空!\n");
    }
    else
    {
        for(int i = 0; i < pArr->cnt; ++i)
        {
            printf("%d",pArr->pBase[i]); // int*
        }
        printf("\n");
    }
}

最佳答案

查看完整内容

命名冲突了,修改一下名字就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-26 09:20:01 | 显示全部楼层
本帖最后由 elvo 于 2014-9-26 11:24 编辑

命名冲突了,修改一下名字就可以了
2014-09-26_111956.png

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

使用道具 举报

发表于 2014-9-26 10:27:29 | 显示全部楼层
报的什么错,我的wingw都没有错的
对了,第52行的cnt应该是int,让其判断是否等于NULL,我觉得显得有些不优雅。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-26 10:41:24 | 显示全部楼层
elvo 发表于 2014-9-26 10:27
报的什么错,我的wingw都没有错的
对了,第52行的cnt应该是int,让其判断是否等于NULL,我觉得显得有些不 ...

VS2010提示 error C2872: “is_empty”: 不明确的符号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-26 12:06:07 | 显示全部楼层
编译错误,“is_empty”不明确的符号。
原因:你自己定义了一个is_empty函数,但是在std::库里面是有一个  std::is_empty操作的。而且你还申明了using namespace std;(即可以调用所有的std库)所以两个重名,导致编译不知道你想调用哪一个!

修改办法:
1, 把自己的定义的函数名更换一下!
2. 去掉using namespace std;  即表示不调用std::is_empty。。
建议:
这也是鱼C老师的建议,在刚学的阶段,尽量不要使用using namespace std;。使用具体的std::cout,std::string,,等等

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
拈花小仙 + 5 + 5 太感谢了~

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-9-26 18:53:49 | 显示全部楼层
Thirteen 发表于 2014-9-26 12:06
编译错误,“is_empty”不明确的符号。
原因:你自己定义了一个is_empty函数,但是在std::库里面是有一个  ...

以后多多答题哦,鱼币多多的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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