Не определено ссылка на функцию при попытке печати матрицы в C - PullRequest
1 голос
/ 26 марта 2011

У меня есть простой метод для печати матрицы.

void printMatrix(int matrix){
   int i;
   for(i=0;i<sizeof matrix/sizeof matrix[0];i++){
      for(j=0; j<sizeof matrix[0]/sizeof matrix[0][0];i++){
           printf("%03d",matrix[i][j]);
      }
      printf("\n");
   }
   printf("\n");
}

И в основном у меня есть вызов:

printMatrix(matrix);

и матрица определяется как:

int matrix[2][3] = {{1, 3, 4},
                    {2, 0, 1}};

Проблема в том, что я получаю «Неопределенную ссылку на« printMatrix »» Знаете ли вы, где может быть проблема?Требуется ли специальное включение?Я так не думаю, но я не знаю, где вина.

Ответы [ 4 ]

4 голосов
/ 26 марта 2011

Вы вызываете функцию до того, как она была определена? Если это так, попробуйте поместить определение функции перед main.

2 голосов
/ 26 марта 2011

Вы объявили параметр printMatrix как int.Измените void printMatrix(int matrix){ на void printMatrix(int matrix[][3]){.Обратите внимание, что вам нужно определить размер всего, кроме первого измерения.

1 голос
/ 26 марта 2011

Я исправил твой код:

#include <stdio.h>

void printMatrix(int matrix[2][3])
{
    int i = 0, j = 0;

    for(i = 0 ; i < 2 ; i++)
    {
        for(j = 0 ; j < 3 ; j++)
        {
            printf("%03d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main(void)
{    
    int matrix[2][3] = {{1, 3, 4},
                        {2, 0, 1}};

    printMatrix(matrix);

    return 0;
}

Код не надежный и красивый. В основном я исправил твой стиль кодирования.

Будьте осторожны, последний «элемент» в следующем цикле «for» должен увеличивать не i, а j!

for(j=0; j<sizeof matrix[0]/sizeof matrix[0][0];i++){

Он должен быть заменен (или, что лучше, моим кодом выше ...)

for(j=0; j<sizeof matrix[0]/sizeof matrix[0][0];j++){

РЕДАКТИРОВАТЬ:

Вы можете получить размер вашей матрицы:

leni = sizeof matrix / sizeof matrix[0][0];

размер матрицы -> 8

размер матрицы [0] [0] -> 4

лени -> 2

lenj = sizeof matrix[0] / sizeof matrix[0][0]

размер матрицы [0] -> 12

размер матрицы [0] [0] -> 4

lenj -> 3

#include <stdio.h>

void printMatrix(int matrix[][3])
{
    int i = 0, j = 0, leni = 0, lenj = 0;

    leni = sizeof matrix / sizeof matrix[0][0];
    lenj = sizeof matrix[0] / sizeof matrix[0][0];

    for(i = 0 ; i < leni ; i++)
    {
        for(j = 0 ; j < lenj ; j++)
        {
            printf("%03d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main(void)
{
    int matrix[2][3] = {{1, 3, 4},
                        {2, 0, 1}};

    printMatrix(matrix);

    return 0;
}
0 голосов
/ 26 марта 2011

Это не сработает по нескольким причинам:

(1) Ваша сигнатура функции неверна:

void printMatrix(int matrix)

принимает только целое число, а не матрицу

(2) Вы не можете использовать sizeof внутри такой функции, так как массивы распадаются на указатели при передаче в функции.Вам нужно будет передать дополнительные параметры, чтобы функция не знала размеры матрицы

Причина ошибки, о которой вы упомянули, однако, не очевидна из публикации исходного кода функции - вы 'Вам нужно будет более четко указать, какие исходные файлы у вас есть и как вы строите свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...