שורה שנותנת שגיאה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שורה שנותנת שגיאה


orlupo

Recommended Posts

מדוע השורה הבאה נותנת שגיאה:

month=malloc(2*days*sizeof(int));

שימו לב ש-month מוגדר כך:

int *month;

השגיאה שניתנת:

error C2440: '=' : cannot convert from 'void *' to 'int *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast

בתודה מראש

קישור לתוכן
שתף באתרים אחרים

יעזור שתגיד מה ה WARNING/ERROR גם כן... אין לנו כח לחפש.. (ואיך הגדרת את המשתנים)..

error C2664: 'time' : cannot convert parameter 1 from 'int *' to 'int *[]'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

קישור לתוכן
שתף באתרים אחרים

אני לא בטוח שאני יודע על מה אני מדבר אבל בהנחה שאני כן זוכר את הדברים האלו אז מה שקרה הוא פשוט מאוד שלחת לפונקציה מערך שמתחיל במקום i של הפונקציה ומה שהפונקציה מצפה לקבל זה מצביע למערך - פוינטר לפוינטר מערך הוא בסך הכול סדרה של משתנים שיש מצביע לראשון מבינהם שהמצביע הוא המערך עצמו (השם שקראת לו זה פשוט מצביע לתא הראשון במערך)

אתה פשוט צריך להעיף את ה* מהמערכים כי זה לא אמור להיות שם וזה מה שיוצר את התקלה

קישור לתוכן
שתף באתרים אחרים

אתה פשוט צריך להעיף את ה* מהמערכים כי זה לא אמור להיות שם וזה מה שיוצר את התקלה

כם צריך תכף תבין למה.

הנה כל התוכנית:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define need 12

void time (int *hs[],int *ms[],int *he[],int *me[],int *hh,int *mm)
{
*hh=*he-*hs;
if(ms<me)
*mm=*me-*ms;
else
{
*hh++;
*mm=60+*me-*ms;
}
}

void main()
{
int choose;
FILE* f;
int *day,*month,*year,*hs,*ms,*he,*me;
int days;
int daysn;
int i;
int nh,nm;
int h=0;
int m=0;
int *hh;
int *mm;

cout<<"Please choose option.\n 1-for view\n 2-for calculate hours to leashlim\n 3-for write.";
cin>>choose;

if(choose==2)
{
f=fopen("D:\\a.txt","r");
fscanf(f,"%d",&days);
((void*)day)=malloc(2*days*sizeof(int));
((void*)month)=malloc(2*days*sizeof(int));
((void*)year)=malloc(2*days*sizeof(int));
((void*)hs)=malloc(2*days*sizeof(int));
((void*)ms)=malloc(2*days*sizeof(int));
((void*)he)=malloc(2*days*sizeof(int));
((void*)me)=malloc(2*days*sizeof(int));
for(i=0;i<days*2;i++)
{
fscanf(f,"%d,%d,%d,%d,%d,%d,%d",&day[i],&month[i],&year[i],&hs[i],&ms[i],&he[i],&me[i]);
}

for(i=0;i<days*2;i++)
{
time(&hs[i],&ms[i],&he[i],&me[i],&hh,&mm);
h+=*hh;
m+=*mm;
}

nm=(need*days-h)*60-m;
nh=nm/60;
nm%=60;
cout<<nh<<" "<<nm;
fclose(f);
}

if(choose==1)
{
f=fopen("D:\\a.txt","r");
fscanf(f,"%d",&days);
((void*)day)=malloc(2*days*sizeof(int));
((void*)month)=malloc(2*days*sizeof(int));
((void*)year)=malloc(2*days*sizeof(int));
((void*)hs)=malloc(2*days*sizeof(int));
((void*)ms)=malloc(2*days*sizeof(int));
((void*)he)=malloc(2*days*sizeof(int));
((void*)me)=malloc(2*days*sizeof(int));
for(i=0;i<days*2;i++)
{
fscanf(f,"%d,%d,%d,%d,%d,%d,%d",&day[i],&month[i],&year[i],&hs[i],&ms[i],&he[i],&me[i]);
}
for(i=0;i<days*2;i++)
{
printf("%d,%d,%d,%d,%d,%d,%d",&day[i],&month[i],&year[i],&hs[i],&ms[i],&he[i],&me[i]);
}
fclose(f);
}

if(choose==3)
{
f=fopen("D:\\a.txt","r");
fscanf(f,"%d",&days);
days++;
((void*)day)=malloc(2*days*sizeof(int));
((void*)month)=malloc(2*days*sizeof(int));
((void*)year)=malloc(2*days*sizeof(int));
((void*)hs)=malloc(2*days*sizeof(int));
((void*)ms)=malloc(2*days*sizeof(int));
((void*)he)=malloc(2*days*sizeof(int));
((void*)me)=malloc(2*days*sizeof(int));
for(i=0;i<days*2;i++)
{
fscanf(f,"%d,%d,%d,%d,%d,%d,%d",&day[i],&month[i],&year[i],&hs[i],&ms[i],&he[i],&me[i]);
}
fclose(f);
f=fopen("D:\\a.txt","w");
fprintf(f,"%d \n",&days);
for(i=0;i<days*2;i++)
{
fprintf(f,"%d,%d,%d,%d,%d,%d,%d",&day[i],&month[i],&year[i],&hs[i],&ms[i],&he[i],&me[i]);
}
}
}

קישור לתוכן
שתף באתרים אחרים

יש סיבה מיוחדת שאתה משלב C++ (IOSTREAM/CIN/COUT) עם C רגיל (MALLOC במקום NEW) וכו'?

האמת שכן.

CIN/COUT אני מעדיף אותן על SCAN/PRINTF.

NEW לא כ"כ התנסתי בה אז העדפתי את MALLOC.

שאר הפקודות שילבתי אותן ב-C כי למדתי קורס ב-C וביום הלפני האחרון רק למדנו CIN/COUT,NEW,מחלקות, משתנה boll והעמסת פונקציות. זהו אני חושב.

קישור לתוכן
שתף באתרים אחרים

אני חייב לציין שהקוד שלך בעייתי ביותר, גם בלי הקשר לערבור... בכל מקרה, זאת צריכה להיות ה TIME שלך:

void time (int hs,int ms,int he,int me,int *hh,int *mm)

{

*hh=he-hs;

if(ms<me)

*mm=me-ms;

else

{

*hh++;

*mm=60+me-ms;

}

}

וככה אתה צריך לקרוא לה:

time(hs,ms,he,me,hh,mm);

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...