首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Dec-C++编译报错,该怎么解决

2013-12-05 
Dec-C++编译报错错误信息:[Linker error] undefined reference to `createDateList(int (*) [3], int&) c

Dec-C++编译报错
错误信息:  [Linker error] undefined reference to `createDateList(int (*) [3], int&)' 
createDateList(int (*) [3], int&)是自己定义的方法
具体代码如下


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define lower 0
#define higher 1
void getNearestDate(int (*date)[3],int num);
void createDateList(int (*date)[3],int &num);
int DateCompare(int date1[3],int date2[3],int minDiffer[3]);
int main(){
     int (*date)[3];
     int num;//记录学生人数 
     createDateList(date,num);
     getNearestDate(date,num);
}
void createDateList(int (*date)[3],int num){
     int i,j=0;
     char *s;
     char *p;
     printf("请输入学生数目:");
     scanf("%d",&num);
     date=new int[num][3];//动态申请二维数组空间 
     printf("请输入学生们的生日,格式例如:81-01-30");
     for(i=0;i<num;i++){
          scanf("%d-%d-%d",date[i][0],date[i][1],date[i][2]);
     }
}
void getNearestDate(int (*date)[3],int num){
     int i,j;
     int minDays;
     int nearestDate[2][3];
     int min[3]={2,0,0};//由于都是80-81年出生的,所有任何两个学生之间相差的年数小于2 
     for(i=0;i<num;i++){
          for(j=i+1;j<num;j++){
               if(DateCompare(date[i],date[j],min)==lower){
                    nearestDate[0][0]=date[i][0];
                    nearestDate[0][1]=date[i][1];
                    nearestDate[0][2]=date[i][2];
                    nearestDate[1][0]=date[j][0];
                    nearestDate[1][1]=date[j][1];
                    nearestDate[1][2]=date[j][2];
                    min[0]=abs(date[i][0]-date[j][0]);
                    min[1]=abs(date[i][1]-date[j][1]);
                    min[2]=abs(date[i][2]-date[j][2]);
               }
          }
     }
     minDays=min[0]*360+min[1]*30+min[2];
     printf("生日相差最小的两个人的生日为:\n");
     printf("%2d-%2d-%2d\n",nearestDate[0][0],nearestDate[0][1],nearestDate[0][2]);
     printf("%2d-%2d-%2d\n",nearestDate[1][0],nearestDate[1][1],nearestDate[1][2]);
     system("pause");
}
int DateCompare(int date1[3],int date2[3],int minDiffer[3]){
    if(abs(date1[0]-date2[0])<minDiffer[0]){
         return lower;
    }
    else if(abs(date1[0]-date2[0])>minDiffer[0]){
         return higher;
    }
    else if(abs(date1[1]-date2[1])<minDiffer[1]){
         return lower;
    }
    else if(abs(date1[1]-date2[1])>minDiffer[1]){
         return higher;
    }        
    else if(abs(date1[2]-date2[2])<minDiffer[2]){
         return lower;
    }
    else{
         return higher;
    }
}

求各位大神帮忙查错,奉上100分


[解决办法]

void createDateList(int (*date)[3],int &num){//此函数应该这样定义

[解决办法]
你的程序问题好多啊,至于报错的话是因为这里:
void createDateList(int (*date)[3],int &num);
void createDateList(int (*date)[3],int num){……}

其他方面有好多问题,先说几条,其他的自己改改吧!

数组在做参数的时候会退化成普通的指针,所以不如直接用二维指针,你这样做有个[3]在这,还会引起歧义。

还有指针存储的内容虽然是地址传递,但本身指针只是普通的变量,仍然是值传递,所以针对指针本身的操作,比如new是无效的,你可以这样void createDateList(int (*&date)[3],int &num)用引用传递。否则main里的date和num都没有被修改。

还有:scanf("%d-%d-%d",&date[i][0],&date[i][1],&date[i][2]); 你少了。

还有这里:
int main(){
int (*date)[3];
date=NULL;//初始化
int num=0;//C++不允许直接使用未初始化变量,养成好习惯
createDateList(date,num);
getNearestDate(date,num);
}
暂时先指出这点问题,其他的问题自己再改改吧。
[解决办法]
void createDateList(int *date[3],int &num); 
[解决办法]
引用:
Quote: 引用:

void createDateList(int (*date)[3],int &num){//此函数应该这样定义

是这样子的,改成这样那个问题就消失了,,,,不过想问一下为什么这样子定义。。。。


那是因为后面的问题没有提出来而已!编译器卡在这个问题上了而已!

数组指针,指针数组,双指针!google下这些区别联系
[解决办法]
引用:
Quote: 引用:

void createDateList(int (*date)[3],int &num){//此函数应该这样定义

是这样子的,改成这样那个问题就消失了,,,,不过想问一下为什么这样子定义。。。。
既然函数接收的是引用,那么当然需要在函数定义里面说明了,不然编译器怎么知道是值传递,还是引用传递呢,你可以研究一下引用的用法。

热点排行