C++ 按字母顺序对结构数组排序

C++ 按字母顺序对结构数组排序,c++,arrays,struct,C++,Arrays,Struct,我搞不清楚我把什么搞砸了。我想我的一些价值观被搞乱了,我正在努力解决这个问题。我觉得这是一个简单的数组,我的代码,但我试图排序这个文件,我得到了这个错误 1>ClCompile: 1> Main.cpp 1>Main.obj : error LNK2019: unresolved external symbol "void __cdecl sort(struct salesTran * const,int)" (?sort@@YAXQAUsalesTran@@H@Z) ref

我搞不清楚我把什么搞砸了。我想我的一些价值观被搞乱了,我正在努力解决这个问题。我觉得这是一个简单的数组,我的代码,但我试图排序这个文件,我得到了这个错误

1>ClCompile:
1>  Main.cpp
1>Main.obj : error LNK2019: unresolved external symbol "void __cdecl sort(struct salesTran * const,int)" (?sort@@YAXQAUsalesTran@@H@Z) 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成功,1失败,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;
}
#包括
#包括
#包括
使用名称空间std;
结构salesTran{
字符串名;
双倍数量、双倍价格;
};
无效掉期(salesTran A[],内部i,内部j);
无效排序(salesTran A[],整数大小);
ostream&operator A.数量>>价格;
返回值为;}
int main()
{
salesTran数据[250];
流鳍;
财务公开(“sales.txt”);
流式流量计;
fout.open(“results.txt”);
int指数=0;
fin>>数据[索引];
而(!fin.eof())
{
索引++;
fin>>数据[索引];
}
排序(数据、索引);
对于(int j=0;jcout这是因为您的
sort
函数接受一个
int data[]
参数,但当您使用它时,您正在传递它
salestran data[]
。您有一个
无效排序的原型(salestran a[],int size);
但它从未定义过。您还需要更改排序函数以正确使用该结构。

首先,您可以这样声明排序和交换函数:

void swap(salesTran A[],int i,int j);
无效排序(salesTran A[],整数大小);
之后,将函数定义为接受整数数组,而不是
salesTran
结构数组

void swap(int data[],int i,int j);
无效排序(整数数据[],整数大小);

您的声明和定义必须与要链接的代码相匹配。

有人能在这里为我指出正确的方向吗?我真的需要帮助。我想弄清楚这一点,这会让我很痛苦。我已经在谷歌上搜索并检查了我所有的书,但我无法运行它。可能是定义
void sort(salesTran A[],int size);
而不仅仅是将其声明为原型会有所帮助。列表底部的sort()例程是
void sort(int data[],int size)
。查看参数列表。我如何不将其声明为原型可能存在重复?您将其声明为原型并实现它。现在,您执行了第一步,但没有执行第二步。语法错误??代码编译良好。它不会链接,因为他正在调用已声明但从未定义的函数。这不是OP wi的唯一内容I’我需要更改。交换和排序中的代码是针对
int[]
的,因此这些更改本身不起作用。好的,所以我更改了调用以匹配。我的实际交换函数如下所示?int-temp;temp=int[I];int[j]=int[j];int[j]=temp;return;好的,我想你会给我一些提示。我将尝试修复这些数组。这可能是一个愚蠢的问题,但我认为我定义了它?你能给我指出正确的方向吗?谢谢!@user2133925你定义了两个不同的函数,一个用于struct(顶部的一个也称为原型),另一个用于
int[]
(实际定义)您有一个链接错误,因为该结构的链接已使用但从未定义。您需要添加一个新函数
void sort(int data[],int size){
(和swap)并填写它,或者更改旧的
int[]
function以匹配使用该结构的函数。好的。因此我需要更改底部的旧int[]。我知道它应该是salesTran[]或index[]?或者我走远了吗?@user2133925如果要这样做,则需要将底部函数更改为
void sort(salesTran data[],int size){
您还需要更改函数的工作方式,方法是将所有比较更改为结构中要排序的内容。您还需要为swap执行此操作。我刚刚尝试添加salestran A[]和index[]。它说不允许使用该类型。我一开始尝试过这样做。这就是我尝试使用INT的原因,因为直到a尝试运行代码时,它才给我一个错误。