@Muriam

В IDE qt creater выходят ошибки при запуске кода, хотя в DEV-C++ код нормально компилируется. Как исправить?

#include <iostream>

#include <conio.h>

#include <locale>

#include <ctime>   //для таймера

#include <cstdlib> //для генерации рандомных чисел

#include <cstring>

#define SIZE 82000

using std::cout;
using std::endl;

int _array1[SIZE];
int _array2[SIZE];
int n = SIZE - 1;
long int time1;

void random_array(int * array);
long int insertion_sort(int * array);
void Merge(int * array, int first, int last); //слияние массивов
void merge_sort(int * array, int first, int last); //рекурсивная процедура сортировки

int main() {

  setlocale(LC_ALL, "rus");

  srand(time(0));

  random_array(_array1); //исходный массов
  //	cout << "\n\n";                      

  memcpy(_array2, _array1, sizeof(int) * SIZE); //копия исходного массова
  /*	cout << "копия исходного массива" << "\n";
  	for (int i = 0; i < SIZE; i++)
  	{
  		cout << _array2[i] << " ";
  	}
  	cout << "\n";
  ЗАКОММЕНТИРОВАНО, ЧТОБ ДОЛГО НЕ ЖДАТЬ ВЫВОД ОГРОМНОГО МАССИВА НА ЭКРАН */

  insertion_sort(_array1); //вызов сортировки вставками	
  /*	for (int i = 0; i < SIZE; i++)
  	{
  		cout << _array1[i] << " ";
  	}
  	cout << "\n";
  ЗАКОММЕНТИРОВАНО, ЧТОБ ДОЛГО НЕ ЖДАТЬ ВЫВОД ОГРОМНОГО МАССИВА НА ЭКРАН */

  //	cout << "\nотсортировано слиянием" << endl;
  merge_sort(_array2, 0, n); //вызов сортировки слиянием
  /*	for (int i = 0; i < SIZE; i++)
  	{
  		cout << _array2[i] << " ";
  	}
  	cout << "\n\n";
  ЗАКОММЕНТИРОВАНО, ЧТОБ ДОЛГО НЕ ЖДАТЬ ВЫВОД ОГРОМНОГО МАССИВА НА ЭКРАН */

  cout << "\n" << "при размере массива = " << SIZE << " элементов" << "\n";
  cout << "время работы сортировки вставками = " << time1 << " мсек" << "\n\n";

  getch();
  return 0;
}

void random_array(int * array) {
  //cout << "исходный массив" << endl;	
  for (int i = 0; i < SIZE; i++) {
    array[i] = rand() % 100;
    //cout << array[i] << " ";              ЗАКОММЕНТИРОВАНО, ЧТОБ ДОЛГО НЕ ЖДАТЬ ВЫВОД ОГРОМНОГО МАССИВА НА ЭКРАН 
  }

}

long int insertion_sort(int * array) {
  //	cout << "\nотсортировано вставками" << endl;

  long int start_time = clock(); // начальное время			//*************

  for (int i = 1; i < SIZE; i++) {
    const int temp = array[i];
    int j = i - 1;
    while (j >= 0 && temp < array[j]) {
      array[j + 1] = array[j];
      j--;
    }
    array[j + 1] = temp;
  }

  long int end_time = clock(); // конечное время				//*************
  time1 = end_time - start_time; // искомое время в мсек  		//*************
  //float time2 = (float)time1 / 1000;				// это в секундах				//*************

  return time1; //*************	
}

void Merge(int * array, int first, int last) {
  int middle, start, finall, j;

  int * mas = new int[SIZE];

  middle = (first + last) / 2; //вычисление среднего элемента
  start = first; //начало левой части
  finall = middle + 1; //начало правой части

  for (j = first; j <= last; j++) //выполнять от начала до конца
    if ((start <= middle) && ((finall > last) || (array[start] < array[finall]))) {
      mas[j] = array[start];
      start++;
    }
  else {
    mas[j] = array[finall];
    finall++;
  }

  //возвращение результата в список
  for (j = first; j <= last; j++)
    array[j] = mas[j];

  delete[] mas;
}

void merge_sort(int * array, int first, int last) {
  //cout << "\nотсортировано слиянием" << endl;
  {
    if (first < last) {
      merge_sort(array, first, (first + last) / 2); //сортировка левой части
      merge_sort(array, (first + last) / 2 + 1, last); //сортировка правой части
      Merge(array, first, last); //слияние двух частей
    }
  }


5e5401bac33c3549149074.jpeg
  • Вопрос задан
  • 921 просмотр
Решения вопроса 1
@res2001
Developer, ex-admin
Есть ошибки/предупреждения компилятора, а есть ошибки/предупреждения qtcreator.
Просмотрите закладку "Вывод сборки", там ошибки и предупреждения компилятора компилирующего вашу программу с заданными вами опциями.
qtcreator для анализа кода в процессе его редактирования скармливает код clangу (его библиотеки идут вместе с qtcretor) с некоторым набором опций. Этот набор опций скорее всего не совпадает с тем набором, который используете вы в проекте. А так же вы скорее всего используете другой компилятор. Поэтому часто предупреждения выдаваемые qtcreator не совпадают с предупреждениями компилятора, собирающего программу. В настройках qtcreator можно отрегулировать опции, которые используются для предварительного анализа кода.
После того как вы собрали проект ошибки/предупреждения реального компилятора и qtcreator перемешиваются.

Состав предупреждений может сильно отличаться в зависимости от используемых опций при сборке проекта. В разных IDE и проектах используются разные опции сборки.

Часто рекомендуют включать максимальный уровень предупреждений и заморочиться с исправлением кода, чтоб предупреждений не было. Как правило предупреждения компилятора говорят если не об ошибках, то по крайней мере о "скользких" местах в коде.
В gcc включить повышенный уровень предупреждений можно параметрами -Wall -Wextra -pedantic и задать используемый стандарт языка с помощью опции --std=xxx
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Это не ошибки, а предупреждения компилятора. Разные компиляторы могут поддерживать разные стандарты c++ в соответствии с которыми выдают предупреждения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы