私の目標は、データを読み込んで人口でソートすることですが、複数のデータ型を受け入れることができるソートを使用する必要があります。テンプレートを使用してこれを行うように指示されましたが、配列 "results [i] .pop"を私のbubblesort関数に渡すたびにエラーが表示されます構造体の配列でテンプレートBubblesortを使用する際のトラブル
コードです:'bubblesort :: T文字列&) ' bubblesort(results [i] .pop); " メモ:候補は: election.cpp:32:3:メモ:テンプレートT bubblesort(T *) T bubblesort ) ^ election.cpp:32:3:注:テンプレート引数の控除/置換に失敗しました:
election.cpp:106:34:注:結果[i] .election :: popを変換できませんここで
struct election
{
string party;
string state;
string pop;
string reps;
int ratio;
bool operator>(election a)
{
return pop > a.pop;
}
};
今すぐバブルソートを呼び出す:
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <fstream>
#include <stdlib.h>
using namespace std;
struct election {
string party;
string state;
string pop;
string reps;
int ratio;
};
template <typename T>
void bubblesort(T ar[])
{
//Bubblesort
int n = 51;
int swaps = 1;
while(swaps)
{
swaps = 0;
for (int i = 0; i < n - 1; i++)
{
if (ar[i] > ar[i + 1])
{
swap(ar[i],ar[i+1]);
swaps = 1;
}
}
}
//End Bubblesort
}
void delete_chars(string & st, string ch)
{
int i = st.find(ch);
while (i > -1)
{
st.replace(i,1,"");
i = st.find(ch);
}
}
int main()
{
int i = 0;
int n = 51;
election results[n];
int population[n];
int electoralVotes[n];
int ratio[n];
string st;
fstream inData;
//Read in Data from Text File
inData.open("electionresults.txt");
//Print Array as is
cout << "Array Printed As is" << endl;
cout << left << setw(10) << "Party" << setw(20) << "State" << setw(20) << "Population" << setw(15) << "Representatives" << endl;
for (int i = 0; i < n; i++)
{
getline(inData,st);
results[i].party = st.substr(0,1);
results[i].state = st.substr(8,14);
results[i].pop = st.substr(24,10);
results[i].reps = st.substr(40,2);
cout << left << setw(10) << results[i].party << setw(20) << results[i].state << setw(20) << results[i].pop << setw(15) << results[i].reps << endl;
}
//Array Sorted by Population
cout << "Array Sorted By Population" << endl;
cout << endl;
cout << endl;
cout << left << setw(10) << "Party" << setw(20) << "State" << setw(20) << "Population" << setw(15) << "Representatives" << endl;
for(int i = 0; i < n; i++){
bubblesort<string>(results[i].pop);
}
あなたのテンプレート関数は 'T'を返すと宣言しています。 'T'を返すテンプレート関数には' return'ステートメントはありません。さらに、バソート関数が何かを返す理由はありません。さらに、関数bubblesotsはパラメータとして配列をとります。 'main()'がそれを呼び出すとき、 'main()'は配列をパラメータとして渡すのではなく、何か他のものを渡します。コード全体が完全に間違っています。テンプレートを勉強するのにもっと時間を費やす必要があります。ここには多すぎる問題があります。 –
これはテンプレートを使った初めてのことです。 Tの代わりに関数をvoidに変更しましたが、同じエラーが表示されます。 – Nar1y
それは、多くの中から一つの問題に過ぎませんでした。 –