C ++ collect2: error: ld вернул 1 состояние выхода - PullRequest
2 голосов
/ 11 января 2020

Я пытался создать программу для вставки данных в массив, и я хотел сделать это с помощью указателей, чтобы я мог создать новый массив и использовать указатели, чтобы просто указывать на него. Но я получил ошибку, и другие вопросы SO не помогли. КОД:

#include <iostream>
using namespace std;

bool insert(int arr[], int size, int elem, int pos);

int main()
{
    // Create a array
    int arrayData[] = {0, 3, 4, 3};
    int *arrptr = arrayData;

    int size = sizeof(arrayData) / sizeof(*arrayData);

    int elem = 6, pos = 3;

    // insert the element to position pos
    insert(arrptr, size, elem, pos);

    return 0;
}

bool insert(int *arr[], int size, int elem, int pos)
{
    int newArray[size + 1];
    for (int i = 0; i < size + 1; i++)
    {
        if (i < pos)
        {
            newArray[i] = *arr[i];
        }
        else if (i == pos)
        {
            newArray[i] = elem;
        }
        else
        {
            newArray[i] = *arr[i - 1];
        }
    }
    *arr = newArray;
    return true;
}

ОШИБКА:

/tmp/ccwuU0I9.o: In function `main':
arrayInsertion.cpp:(.text+0x61): undefined reference to `insert(int*, int, int, int)'
collect2: error: ld returned 1 exit status

1 Ответ

2 голосов
/ 11 января 2020

Эти два объявления

bool insert(int arr[], int size, int elem, int pos);
            ^^^^^^^^

и

bool insert(int *arr[], int size, int elem, int pos)
            ^^^^^^^^^

отличаются.

Также массивы переменной длины

int newArray[size + 1];

не являются стандартом Функция C ++.

И это утверждение

*arr = newArray;

не имеет смысла, поскольку переменная arr является локальной переменной функции. Его изменение не влияет на переданный аргумент.

Первоначально необходимо динамически распределить исходный массив.

И массив будет увеличен без добавления новых значений, если заданная позиция больше чем текущий размер исходного массива.

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