2013-03-05 3 views
-3

내가 엉망인 것을 알아낼 수 없습니다. 나는 값이 어지럽고 이것을 고치려고 노력하고 있다고 생각합니다. 이 코드는 간단한 배열로 생각되지만이 파일을 정렬하려고하는데이 오류가 발생합니다.구조체 배열을 알파벳순으로 정렬

1>ClCompile: 
1> Main.cpp 
1>Main.obj : error LNK2019: unresolved external symbol "void __cdecl sort(struct salesTran * const,int)" ([email protected]@[email protected]@[email protected]) referenced in function _main 
1>C:\Users\BranN3W\Documents\Visual Studio 2010\Projects\3-1Notes\Debug\3-1Notes.exe : fatal error LNK1120: 1 unresolved externals 
1> 
1>Build FAILED. 
1> 
1>Time Elapsed 00:00:01.96 

========== 빌드 : 0, 0 ==========

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

struct salesTran { 
    string name; 
    double quantity,price; 
}; 

void swap(salesTran A[], int i, int j); 
void sort(salesTran A[], int size); 

ostream& operator << (ostream& os, salesTran A) 
{os << A.name << "\t" << A.quantity << "\t" << A.price; 
    return os;} 
istream& operator >> (istream& is, salesTran& A) 
{is >> A.name >> A.quantity >> A.price; 
    return is;} 

int main() 
{ 
    salesTran data[250]; 

    ifstream fin; 
    fin.open("sales.txt"); 
    ofstream fout; 
    fout.open("results.txt"); 

    int index = 0; 
    fin >> data[index]; 
    while(!fin.eof()) 
    { 
     index++; 
     fin >> data[index]; 
    } 

    sort(data, index); 

    for(int j=0; j < index; j++) 
    { 
     cout << data[j] << endl; 
    } 

    return 0; 
} 

void swap(int data[], int i, int j) 
{ 
    int temp; 
    temp = data[i]; 
    data[i] = data[j]; 
    data[j] = temp; 
    return; 
} 

void sort(int data[], int size) 
{ 
    for(int p=1; p<size; p++) 
    { 
     for(int c=0; c<size-p; c++) 
     { 
      if(data[c]>data[c+1]) swap(data,c,c+1); 
     } 
    } 
    return; 
} 
+0

누구나 나를 올바른 방향으로 안내 할 수 있습니까? 나는 정말로 도움을 사용할 수있다. 나는 이것을 알아 내고 나를 죽이고 싶다. 나는 맹세하고 모든 책을 검사했지만, 나는이 책을 읽을 수는 없다. – user2133925

+0

아마도 ** prototype으로 선언하는 것보다는 * void 정렬 (salesTran A [], int size);를 ** 정의하는 것이 도움이 될 것입니다. 리스트의 맨 아래에있는 sort() 루틴은'void sort (int data [], int size)'입니다. 매개 변수 목록을보십시오. – WhozCraig

+0

[정의되지 않은 참조/확인되지 않은 외부 기호 오류 란 무엇이며 어떻게 수정해야합니까? : 선언 된 변수와 정의되지 않은 변수 또는 함수.] (http://stackoverflow.com/a/12574403/902497) –

답변

1
을 생략 최신 1 0, 실패, 성공

sort 함수가 int data[] 매개 변수를 사용하지만 사용자가이를 사용할 때 salestran data[]을 전달하기 때문입니다. void sort(salesTran A[], int size);의 프로토 타입이 있지만 결코 정의되어 있지 않습니다. 구조체를 올바르게 사용하려면 정렬 함수를 변경해야합니다. 먼저

+0

자, 힌트를 주셨으면 좋겠어. 나는이 배열을 고치려고 노력할 것이다. 이것은 바보 같은 질문 일 수 있습니다. 그러나 나는 그것을 정의했다고 생각 했습니까? 올바른 방향으로 나를 가리킬 수 있습니까? 고맙습니다! – user2133925

+0

@ user2133925 구조체에 대한 하나의 함수 (프로토 타입이라고도하는 함수)와'int []'(실제 정의)에 대한 함수 두 가지를 정의했습니다. 구조체에 대한 함수가 하나이기 때문에 링크 오류가 발생했습니다 사용되었지만 정의 된 적이 없다. 새로운 함수'void sort (int data [], int size) {'(그리고 swap)을 추가하고 그것을 채우거나 오래된'int []'함수를 변경하여 구조체를 사용하는 함수와 일치시킬 필요가 있습니다. –

+0

괜찮습니다. 그래서 하단의 이전 int []를 변경해야합니다. salesTran [] 또는 index []이어야한다는 것을 알고 있습니까? 아니면 나는 벗어 났습니까? – user2133925

0

, 당신은 다음처럼 종류 및 스왑 함수를 선언 :

void swap(salesTran A[], int i, int j); 
void sort(salesTran A[], int size); 

후 대신 salesTran 구조체의 배열의 정수의 배열을 가지고 같은 기능을 정의합니다.

void swap(int data[], int i, int j); 
void sort(int data[], int size); 

코드를 연결하려면 선언과 정의가 일치해야합니다.

+1

구문 오류 ?? 코드가 잘 컴파일됩니다. 그는 선언 된 함수를 호출했기 때문에 ** 링크 **하지 않습니다. – WhozCraig

+0

이것은 OP가 변경해야하는 유일한 것은 아닙니다. 스왑과 정렬의 코드는'int []'에 대한 것이므로이 변경만으로는 작동하지 않습니다. –

+0

좋아요, 그래서 전화가 바뀌 었습니다. 내 실제 스왑 함수는 다음과 같습니다. int temp; temp = int [i]; int [j] = int [j]; int [j] = 임시; 반환; – user2133925