Ich schreibe einen Code, um Primzahl in eine Datei schreiben, und danach schreibe ich eine andere Funktion, um die Arbeit in vielen Threading zu teilen. Aber mein Problem ist der Compiler schreiben Sie mir einen Fehlerofstream: kann nicht in ofstream konvertieren &
error C2664: 'void (int,int,std::ofstream &)' : cannot convert argument 3 from 'std::basic_string,std::allocator>' to 'std::ofstream &'.
Aber mein Problem ist, dass ich nicht verstehe, was der Fehler sagt und wo ich etwas tun, was verboten ist.
Dies ist mein Code:
void writePrimesToFile(int begin, int end, ofstream& file)
{
int i, j, prime = 1;
for (i = begin; i <= end; i++) {
for (j = begin; i <= end/2; j++) {
if (i % j == 0) {
prime = 0;
} else {
file << i << endl;
}
}
}
}
void callWritePrimesMultipleThreads(int begin, int end, string filePath, int N)
{
double startTimer, stopTimer;
startTimer = clock();
thread* arr = new thread[N];
for (int i = 0; i < N; i++) {
int start = begin;
int finish = N;
arr[i] = thread(writePrimesToFile, start, finish, ref(filePath));
start = finish;
finish += N;
}
for (int i = 0; i < N; i++) {
arr[i].join();
}
stopTimer = clock();
cout << "The time that takes is: " <<
double(stopTimer - startTimer)/CLOCKS_PER_SEC << endl;
}
Sie vorbei einen Verweis auf eine 'std :: string' Objekt in den Thread-Funktion, die eine' std :: will ofstream' Referenz (eindeutig erklärt in der Nachricht). Das wird nicht gut funktionieren. –
Oh, und du hast ein Speicherleck zu. Warum benutzen Sie nicht stattdessen 'std :: vector'? –
@Someprogrammerdude Wo habe ich ein Speicherleck? Kannst du mehr erklären ! –