Прошло много времени с тех пор, как я использовал C ++, поэтому, пожалуйста, держите меня в покое. Как правильно определить функцию на C ++ в одном файле и вызывать ее из другого, не используя заголовочные файлы? Я бы использовал заголовочный файл, но мой профессор сказал нам не делать этого. У меня постоянно возникают проблемы с компиляцией моих файлов, связанные с отсутствием моей функции. Любая помощь приветствуется. Моя программа должна сортировать массив в порядке возрастания, используя сортировку выбора, и сортировку по убыванию, используя сортировку пузырьком.
Вот что у меня так далеко. Вот мой водитель.
Driver.cpp
#include "selection.cpp"#include "bubble.cpp"
#define ArraySize 10 //size of the array
#define Seed 1 //seed used to generate random number
int values[ArraySize];
int main(int argc, char** argv) {
int i;//seed random number generator
srand(Seed);
//Fill array with random integers
for(i=0;i<ArraySize;i++)
values[i] = rand();
cout << "\n Numbers in array." << endl;
for(i=0;i<ArraySize; i++)
cout << &values[i]<< "\n";
int* array_p[] = values[];
//Function call for BubbleSort
bubblesort(array_p[], ArraySize);
for (i=0;i<ArraySize; i++)
cout << &values[i] << "\n";//SelectionSort
selectionsort(array_p, ArraySize);
cout << "Numbers in ascending order." << endl;
for (i=0;i<ArraySize; i++)
cout << &values[i] << "\n";
return 0;
}
bubble.cpp
#include <iostream>int* bubblesort(int values[], int size) {
int i, j;
for(i=0;i<size-1;i++){
for(j=0; j<size-1; j++){
if(values[j+1] > values[j]){
int temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
return values;
}
}
}
};
selection.cpp
#include <iostream>int *selectionsort(int values[], int size){for(int i=0; i<size-1; i++){
for(int j=0; j<size; j++){
if(values[i] < values[j]){
int temp = values[i];
values[i] = values[j];
values[j] = temp;return values;
}
}
}
};
Просто пиши
int* bubblesort(int values[], int size);
в других исходных файлах, которые вы хотите вызвать этой функцией (перед тем, как вызывать ее).
Обратите внимание, что если вы не используете файлы заголовков, вам нужно вручную позаботиться о том, чтобы при изменении типа возвращаемого значения или списка параметров в одном файле вы делали одинаковые изменения во всех файлах.
Несколько других вещей:
Возможно, вы захотите перенести оператор return в конец функции, а не возвращать момент, когда вы сделали первый обмен. Или даже лучше, чтобы функции возвращались void
— вызывающий объект уже знает значения, потому что он только что вызвал функцию, поэтому он ничего не добивается, чтобы вернуть ее снова.
cout << &values[i]<< "\n";
выводит адрес каждого значения, я думаю, что вы хотели вывести значения вместо этого.
int* array_p[] = values[];
и следующая за ним строка — синтаксические ошибки, я думаю, вы имели в виду: int *array_p = values; bubblesort(array_p, ArraySize);
Других решений пока нет …