2015-01-25 3 views
-2

Я пытаюсь перетасовать 2D-массив структур без использования векторов. Код, который я до сих пор работает в одном измерении, но у меня возникают проблемы с его расширением до двух измерений. Вот что у меня есть до сих пор:Передача 2d массива структур в C++

#include <iostream> 
#include <algorithm> 
#include <time.h> 

using namespace std; 

struct bingo { 
    int set1; 
    int set2; 
}; 

void swap(int *a, int *b) { 
    int temp = *a; 
    *a = *b; 
    *b = temp; 
} 

void randomize(int arr[], int n) { 
    srand(time(NULL)); 

    for(int i = n-1; i > 0; i--) { 
     int j = rand() % (i + 1); 
     swap(&arr[i], &arr[j]); 
    } 
} 

int main() { 
    const int n = 28; 
    bingo arr[n] = { // array of structs 
     {0,1}, {1,2}, {2,3}, {3,4} 
    }; 

    randomize(arr, n); // My error happens here and it says "cannot convert 
         // "bingo* to int* for argument '1' to void randomize(int*, int) 

    for(int i = 0; i < n; i++) { 
     std::cout << arr[i].set1 << arr[i].set2 << endl; 
    } 

    return(0); 
} 
+2

Ну, да. 'randomize()' принимает 'int *', а не 'bingo'. Вы должны сначала изменить эту функцию, чтобы взять «bingo *», в первую очередь. – mauzel

+1

Является ли это C или C++? Вы говорите C, но отметили C++. Пожалуйста, либо сделайте его допустимым C, либо удалите упоминания C. – Vality

+1

@Vality От включенных утверждений и использования 'std :: cout' это явно C++. У ОП, похоже, есть неправильные представления об используемом языке. –

ответ

0

У вас есть ошибки в коде. Прямо сейчас ваш код будет работать в «1d», потому что все ваши функции принимают только ints, которые являются «1d». Но теперь с вашей версией «2d» вам нужно изменить многие из ваших типов на bingo. Сделать эти изменения,

Line 12: void swap(int *a, int *b) { к void swap(bingo *a, bingo *b) {

Линия 13: int temp = *a; к bingo temp = *a;

Линия 18: void randomize(int arr[], int n) { к void randomize(bingo arr[], int n) {

ошибка вы получили, было на самом деле очень информативный на то, что было неправильным поэтому обратите внимание на это!

Смежные вопросы