2013-03-18 1 views
0
vector_dinamic *creeaza_vector() 
{ 
    vector_dinamic *v=malloc(sizeof(vector_dinamic)*capacitate_initiala); 
    v->Element=malloc(sizeof(Elements)*capacitate_initiala); 
    v->lungimea=0; 
    v->capacitatea=capacitate_initiala; 
    return v; 

} 

이것은 폐회로가 길이이고 용량이 용량 인 동적 벡터입니다. capcacitatea_initiala는 100입니다. 즉 100 개의 요소를 저장할 수 있습니다.C 알 수없는 유형의 두 요소를 비교하는 방법

typedef void* Elements; 

typedef struct{ 
    Elements * Element; 
    int lungimea; 
    int capacitatea; 

} vector_dinamic; 
나는 또한 내 벡터의 서로 다른 유형의 요소를 저장 할 수있는 요소의이 유형 무효가

, 나는 추가 기능을 관리했습니다,하지만 내 문제는 내가 두 요소를 비교할 수있는 방법입니다 동일한 유형, 난 삭제 기능을 구현하고자하지만 난 두 가지 요소 나는이 요소 유형이

typedef struct{ 
    int numar_apartament; 
    int suma; 
    char * tipul; 
} Cheltuieli; 

을 비교하기 위해 사투를 벌인거야, 지금 누군가가 어떻게 "numar_apartament에 의해 내 일반적인 벡터의 요소를 비교하는 나에게 말할 수 "?

void modifica(vector_dinamic * vector, int numar_apartament) 
{ 
    int i,a=0; 
    for (i=0;i<vector->lungimea;i++) 
    { 
     if (vector->Element[i]->numar_apartament)==element->numar_apartament) 
      a=1; 
    } 
    return a; 

} 

이 내가 뭘하려하지만 많은 오류를 얻을 작동하지 않습니다 ...

감사합니다!

+0

전체 코드를 입력하십시오. 당신의 문제의 이유는 다른 곳에서있을 수 있습니다. – MOHAMED

+0

스페인어로 된 코드를 읽기가 약간 어렵습니다. – Alex

+0

질문과 관련이 없지만 "a = 1;" 첫 세트 후에 다시 변경되지 않으므로 "깨뜨릴 수 있습니다." 당신이 처음으로 "for"에서 벗어났습니다. –

답변

3

void 포인터에는 특정 유형이 없으므로 포인터는 아무 것도 가리킬 수 있습니다. 또한 괄호, 당신이 여는 괄호를 놓치고있어 문제가

((Cheltuieli *) vector->Element[i])->numar_apartament 

: 당신은 그들 역 참조 할 수 있도록, 그들이 가리 실제의 형태에 void 포인터를 캐스팅해야합니다.

+0

고맙습니다! – JackRobinson

1

주요 아이디어는 비교할 변수에 대한 포인터를 가져 와서 비교하기 위해 memcmp를 사용하는 것입니다. 또한 일부 컴파일 오류를 수정했으며 수정 된 코드는 아래에 나와 있습니다. 도움이되는지 확인하십시오!

#include "malloc.h" 
#include "memory.h" 

typedef void* Elements; 

typedef struct{ 
    Elements * Element; 
    int lungimea; 
    int capacitatea; 

} vector_dinamic; 

typedef struct{ 
    int numar_apartament; 
    int suma; 
    char * tipul; 
} Cheltuieli; 

vector_dinamic *creeaza_vector() 
{ 
    int capacitate_initiala = 10; 
    vector_dinamic *v = (vector_dinamic *)malloc(sizeof(vector_dinamic)*capacitate_initiala); 
    v->Element= (Elements *)malloc(sizeof(Elements)*capacitate_initiala); 
    v->lungimea = 0; 
    v->capacitatea = capacitate_initiala; 
    return v; 

} 

int modifica(vector_dinamic *vector, int numar_apartament) 
{ 
    int i, a = 0; 
    Cheltuieli **tmp = (Cheltuieli **)&(vector->Element); 
    for (i = 0; i < vector->lungimea; i++) 
    { 
     if ((memcmp(&(tmp[i])->numar_apartament, &numar_apartament, sizeof(int)) == 0)) 
      a = 1; 
    } 
    return a; 

} 
+0

고맙습니다! – JackRobinson