PDA

View Full Version : رفع خطای linker در زبان سی پلاس



javadspy++
جمعه 13 اردیبهشت 1392, 16:10 عصر
سلام خدمت همگی دوستان..:چشمک:

من برنامه مرتب سازی merg sort رو نوشتم اما

با یه خطای غیر معمول روبرو شدم در واقع لینک کننده برنامه (Linker )
دو تابع درون برنامه را نمی شناسد که من هم (prototype) رو تعریف کردم وهم اعلان های برنامه
رو درست نوشتم
اما (linker) برنامه خطا میگیرد در صورتب که اگر برنامه رو کامپایل کنیم خطا ندارد!!!!:متفکر:
نمونه کد رو میزارم لطف کنید راهنمایی کنید:ناراحت:
ممنون میشم..

UfnCod3r
جمعه 13 اردیبهشت 1392, 18:12 عصر
لازم نبود کد ها رو اپلود کنی می زاشتی همین جا بین تگ CPP
اینطوری

#include<iostream.h>
#include<conio.h>
#define n 5
void mergesort(int,int,int);
void merge(int,int,int,int);
void main()
{
int a[n],t=0;
for(int i=0;i<n;i++)
cin>>a[i];
mergesort(t,n-1,a[n]);
for (i=0;i<n;i++)
cout<<a[i];
}


void mergesort(int low,int high,int a[])
{
int mid;
if(low>=high)
return;
else
{
mid=(low+high)/2;
mergesort(low,mid,a[n]);
mergesort(mid+1,high,a[n]);
merge(low,mid,high,a[n]);
}
}

void merge(int low,int mid,int high,int a[])
{
int i,j,h,b[n];
i=low;
h=low;
j=mid+1;
while(h<mid && h<=high)
{
if(a[i]<a[j])
{
b[h]=a[i];
i++;
}
else
{
b[h]=a[j];
b[h+1]=a[i];
j++;
}
h++;}
if (h>mid)

for(int k=j;k<=high;k++)
{
b[h]=a[k];
h++;
}
else
for(int k=i;k<=mid;k++)
{
b[h]=a[k];
h++;
}

for ( k=low;k<=high;k++)
a[k]=b[k];
}

مشکلش اینه که شما تابعت بدین صورت هست

void mergesort(int low,int high,int a[])

ولی شما تو خط 4و5 اینطوری تعریف کردی

void mergesort(int,int,int);
void merge(int,int,int,int);

ارایه رو به عنوان ارگومان تابع نمیشه فرستاد در واقع این طور که شما نوشتی اشاره گر فرستاده میشه .
این

void mergesort(int low,int high,int a[])

با این

void mergesort(int low,int high,int* a)

برابره

پس شما باید خط 4 و 5 رو تغییر بدی ب این

void mergesort(int,int,int*);
void merge(int,int,int,int*);