2014-05-21 5 views
-2

나는 prim의 알고리즘에 대한이 piese 코드를 작성했으며이 오류가 발생합니다 : "예상 식별자 또는 '('앞에 'int'". 다른 .c 파일 이것은 다음과 같은 오류입니다. "s algoritm 2 \ prim.h | 6 | 오류 : 예상 식별자 또는 '('int '의 알고리즘 앞에') 이 오류가 발생하는 이유는 누구나 알 수 있습니까?예상 식별자 또는 '('앞에 'int'

헤더 파일

#ifndef prim 
#define prim 
#define nmax 10 

void prim(int mat[nmax][nmax],int x,int n ,int m); 

#endif // graphs 

PRIM.c 파일

#include <stdio.h> 
#include <stdlib.h> 
#include "prim.h" 


void prim(int mat[nmax][nmax], int x, int n, int m) 
{ 
int viz[nmax], u, v, min, total = 0; 
int i, j, counter; 

for(i = 0; i < n; i++) 
{ 
    viz[i] = 0; 
} 

viz[x] = 1; 

for(counter = 0; counter < m; counter++) 
{ 
    min = 999; 

    for(i = 0; i < n; i++) 
    { 
     if(viz[i]==1) 
     { 
      for(j = 0; j < n; j++) 
      { 
       if(viz[j]!=1) 
       { 
        if(min > mat[i][j]) 
        { 
         min = mat[i][j]; 
         u = i; 
         v = j; 
         } 
        } 
       } 
      } 
     } 

     viz[v] = 1; 
     total += min; 
     printf("\nMuchie gasita de la %d -> %d de weight %d", u, v, min); 

    } 

    printf("\nDimensiunea arborelui de acoperire minim: ", total); 

} 

을 main.c 파일은

#include <stdio.h> 
#include <stdlib.h> 
#include "prim.h" 

void main() 
{ 
    FILE *fin; 
    char sursa[20]; 
    int mat[nmax][nmax], n, m, i, j, x; 

    printf("\nIntroduceti fisierul sursa: "); 
    gets(sursa); 

    fin = fopen(sursa, "r"); 
    if(fin == NULL) 
    { 
     perror("\nEroare la deschiderea fisierului!"); 
     exit(-1); 
    } 

    fscanf(fin, "%d %d", &n, &m); 

    for(i = 0; i < n; i++) 
    { 
     for(j = 0; j < n; j++){ 

      fscanf(fin, "%d", &mat[i][j]); 

      if(mat[i][j] == 0) 
     {  
      mat[i][j] = 999; 
     } 
      fprintf(stdout, " %3d ", mat[i][j]); 
    } 
    fprintf(stdout, "\n"); 
} 

printf("\nIntroduceti nodul sursa: "); 
scanf("%d", &x); 

prim(mat, x, n, m); 
} 
+0

로 작성해야 34,접미사, 그래서 *** 질문에 있지 *** 귀하의 질문 – Marcin

+1

IN 전체 오류 메시지를 표시하십시오. 그 의견을 읽는 것은 어렵습니다! 질문 [** edit **] (http://stackoverflow.com/posts/23789100/edit) 질문에 오류를 넣어 두어야합니다! – abelenky

+0

오류 메시지를 강조 표시하기 위해 첫 번째 단락을 다시 포맷해야합니다 (이상한 것 같습니다). 그건 그렇고, * 알고리즘 *입니다. – didierc

답변

6

당신은 당신의 헤더 파일에 prim를 #define한다, 다음 프로그램에서이 용어를 사용합니다. 전처리 기가 의미하는 바를 신경 쓰지 않고 단지 #define 지시어에 따라 전 처리기를 바꿉니다.

작은 문자와 간단한 용어를 #define 값으로 사용하는 것을 피하십시오. (사용법을 모르는 경우 큰 #define을 사용하지 마십시오.) 그런 경우가 발생합니다. 처음에는 대문자로 #define을 변경하십시오.

+0

대답 주셔서 감사합니다 – sixfeet

0

.h 파일의 첫 번째 줄을 제거한 후 MS VISUAL 2010에서 코드를 컴파일하십시오. 다른 변경 사항은 없습니다. 어쩌면 컴파일러를 변경해야 할 수도 있습니다.

+0

네, 아마도 그게 문제입니다. 제안 해 주셔서 감사합니다! – sixfeet

1

문제는 헤더 파일에 있습니다

#ifndef prim 
#define prim 
#define nmax 10 

void prim(int mat[nmax][nmax],int x,int n ,int m); 

#endif // graphs 

그것은 당신이 경비를 포함 설정하려고했지만, 당신이 prim을-재사용과 같다; 지금 때마다 처리기는 소스 코드에 prim를 볼 수 있기 때문에 이것은 빈 문자열로 교체합니다, 문제가, 그래서 당신의 함수 선언은

void (int mat[10][10],int x, int m ,int m); 

이되고 정의는

void (int mat[10][10], int x, int n, int m) 
{ 
int viz[10], u, v, min, total = 0; 
... 

된다 및 main의 함수 호출은

(mat, x, n, m); 

가드를 포함하는 일반적인 규칙은 012로 모두 대문자를 사용하는 것입니다된다 헤더가

#ifndef PRIM_H 
#define PRIM_H 
#define nmax 10 

void prim(int mat[nmax][nmax], int x, int n, int m); 

#endif // PRIM_H 
+0

그게 문제 였어 !! 고마워요! :디 – sixfeet

관련 문제