На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> error C2143 и error C3861 , пропустил какой то include? Какой? Help!
    Изучаю C++ при помощи visual studio 2010
    разбираю один пример и никак не пойму в чём дело то? сыплются ошибки такого рода:

    error C2143: syntax error : missing ')' before '{'
    error C3861: 'min': identifier not found
    error C2143: syntax error : missing ')' before '{'
    error C2143: syntax error : missing ';' before ')'
    error C3861: 'min': identifier not found
    error C2143: syntax error : missing ')' before '{'
    error C2143: syntax error : missing ';' before ')'
    error C3861: 'min': identifier not found

    Путём упорного гугления кажется понял что не хватает какого то include. Какой надо подключить, подскажите пожалуйста?
    у меня подключены
    #include "iostream"
    #include "algorithm"
    #include <conio.h>

    ещё пробовал подключить

    #include "stdlib.h"
    #include "time.h"
    #include "math.h"

    Всё без толку.

    ОС windows7 x64
      А код примера можно посмотреть?
        Однако, информация на буржуйском сайте помогла разобраться с min (error C3861)
        я добавил

        #include <stdio.h>

        и переправил min в __min

        Но ошибка

        error C2143: syntax error : missing ')' before '{'

        пока не решена.

        Други, ну помогите кто нибудь, уже часа полтора лбом в закрытую дверь долблю.
        Лоб всмятку, на двери пара лёгких царапин((

        Добавлено
        Код - не вопрос. Уверен, с синтаксисом там всё норм.

        ExpandedWrap disabled
          void merge(int *A, int *B, int l, int m, int r)
          //A - сортируемый массив, B - буфер для слияния, l - первый элемент первой части, r - последний элемент второй части, m - последний элемент первой части
          {
           int i=l;
           int j = m+1;
           int k=l;
           //Вставлять минимальные элементы в B пока не кончится одна из последовательностей
           while (( i<=m) && (j<= r))
           {
            if (A[i]  { // РУГАЕТСЯ ВОТ ЗДЕСЬ
             B[k] = A[i];
             i++;
            } else {
             B[k] = A[j];
             j++;
            }
            k++;
           }
           //Скопировать остаток, если таковой имеется
           while (i <= m)
           {
            B[k]=A[i];
            k++;
            i++;
           }
           while (j <= r)
           {
            B[k]=A[j];
            k++;
            j++;
           }
           //Отсортированная часть остаётся в B
          }
          Цитата Flass @
          Изучаю C++ при помощи visual studio 2010
          разбираю один пример и никак не пойму в чём дело то? сыплются ошибки такого рода:

          error C3861: 'min': identifier not found
          error C3861: 'min': identifier not found

          Путём упорного гугления кажется понял что не хватает какого то include. Какой надо подключить, подскажите пожалуйста?
          у меня подключены
          #include "iostream"
          #include "algorithm"
          #include <conio.h>

          ещё пробовал подключить

          #include "stdlib.h"
          #include "time.h"
          #include "math.h"

          Всё без толку.


          Все без толку, потому что вы не понимаете, что вы делаете. То есть вы используете имя min, а что это за имя, где ооно объявлено, и к чему оно относится, = вы не знаете. Более того эти два набора заголовков не совместимы между собой, так как первый набор заголовков относится к С++, а второй набор заголовков - к С.
          Поэтому вам сначала надо разобраться, на каком языке вы пишите программу: на С++ или С.
          Если вы пишите на С++, то стандартный алгоритм std::min объявлен в заголовочном файле <algorithm>, и если вы не включили стандартное пространство имен в глобальное пространство имен, то вам перед именем min надо указывать имя того пространства имен, где этот алгоритм объявлен, то есть вам, скорей всего, следовало писать std::min

          Добавлено
          Цитата Flass @
          if (A[i] { // РУГАЕТСЯ ВОТ ЗДЕСЬ


          А синтаксическая ошибка у вас, к примеру, в указанном выше предложении. Вы забыли в if поставить закрывающуюся круглую скобку после выражения, состоящего из элемента массива.
            Как я понял, min это функция в стандартной библиотеке, которую мы подключаем через include. Всё таки с min мне удалось разобраться. Поясните пожалуйста тогда, с учётом того что Visual Studio это всё таки C++, как должны выглядеть мои include?
            Сейчас они выглядят так:

            #include "iostream"
            #include "algorithm"
            #include <conio.h>
            #include <stdio.h>

            Добавлено
            Цитата Сыроежка @
            А синтаксическая ошибка у вас, к примеру, в указанном выше предложении. Вы забыли в if поставить закрывающуюся круглую скобку после выражения, состоящего из элемента массива.

            Миль пардон, но это текст примера и у автора всё работало... Такой синтаксис вполне законен, я думаю)

            Добавлено
            Кстати, я сделал как вы мне посоветовали
            стандартный алгоритм std::min объявлен в заголовочном файле <algorithm>, и если вы не включили стандартное пространство имен в глобальное пространство имен, то вам перед именем min надо указывать имя того пространства имен, где этот алгоритм объявлен, то есть вам, скорей всего, следовало писать std::min
            Сработало, спасибо! А вот по второй ошибке пока никак..
              Цитата Flass @
              Миль пардон, но это текст примера и у автора всё работало... Такой синтаксис вполне законен, я думаю)


              Если вы считаете, что такой код вполне законен, то все свои претензии предъявляйте к разработчику компилятора! Я вам ничем помочь не могу.
                Что делать, я не копенгаген в C++, знаю только самые основы. Всё таки, с одной ошибкой мы разобрались, подскажите как решить вторую. Это пример работавшего у автора кода, дело в том что я не знаю какие он использовал include потому что приведён просто кусок кода и всё. Ёлки - палки, да как вообще такая ошибка может быть?)
                  Попробуйте
                  ExpandedWrap disabled
                      if (A[i]  { // РУГАЕТСЯ ВОТ ЗДЕСЬ

                  Заменить на
                  ExpandedWrap disabled
                      if (A[i])  {
                    Цитата Flass @

                    Цитата aster_x @

                    Нет, я думаю дело не в этом. Если поступить как вы советуете, дальше при аналогичных ошибках и исправлении начинаются и вовсе странные вещи, например:
                    ExpandedWrap disabled
                      //Сортировка слиянием, распараллеленная
                      void mp_sort(int* A, int* B, int N, int P)
                      //A - сортируемый массив, B - буфер для слияния, N - размер массива, P - число параллельно выполняемых потоков
                       
                      {
                       int *tA = A;
                       int *tB = B;
                       int *t = NULL;
                       //1)Разбиение на блоки и сортировка их по отдельности
                       int i;
                       int part_size = (int)ceil((float)N/(float)P);
                       
                       #pragma omp parallel shared(P, tA, tB, N, part_size)
                       #pragma omp for private(i)
                       for(i=0;i {// ВОТ ЗДЕСЬ
                        nrmsort(tA,tB,i*part_size,std::min((i+1)*part_size,N-1));
                       }
                       int r2,m;
                       while (part_size < (2*N))// а ещё почему то вайл подчёркнут красным, хотя в список ошибок не внесён.
                       {
                        #pragma omp parallel shared(P, tA, tB, N, part_size)
                        #pragma omp for private(i,r2,m)
                        for(i=0;i  {
                         r2 = std::min(i+part_size-1,N-1);
                         m = ((i+i+part_size-1) >> 1);
                         merge(tA,tB,i,m,r2);
                        }
                        part_size *= 2;
                        t = tA;
                        tA = tB;
                        tB = t;
                        t = NULL;
                       }
                       if (tA != A)
                       {
                      я на знаю где вы такой код нашли. Но он вообще не сответсвует не одному стандарту.

                      Что это такое?
                      Цитата
                      for(i=0;i


                      Должно быть так, как минимум
                      ExpandedWrap disabled
                        for(i=0;;)


                      Добавлено
                      дайте ссылку где вы этот "код" откопали.
                      Сообщение отредактировано: aster_x -
                        То есть эти выражения полностью эквивалентны?
                          Скорее всего этот "код" прошел какую то фильтрацию(наподобие обрезание HTML тегов), после чего пришел в "не употребительное" состояние.
                            http://www.hpcc.unn.ru/?dir=273 вот ссылка
                              Цитата Flass @
                              То есть эти выражения полностью эквивалентны?

                              Такого "for(i=0;i" выражения вообще нет в С++, это нарушение синтаксиса написания программы.

                              Добавлено
                              Код на указанном вами сайте. Код явно "кастрирован". Где то его "посекло". Вы вы и будете ломать голову. Поищите другие примеры реализации Вашей задачи.

                              Добавлено
                              Цитата aster_x @
                              for(i=0;i

                              Попробуйте заменить на
                              ExpandedWrap disabled
                                  for(i=0;i<N;++i)
                              Сообщение отредактировано: aster_x -
                                Вот оно что!! Спасибо за подсказку, а то у меня уже мозги кипят)

                                Добавлено
                                Всем спасибо, разобрались в чём тут дело) Тема закрыта. Код. кстати, не заработал(

                                Добавлено
                                Вопрос решён
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0558 ]   [ 16 queries used ]   [ Generated: 3.02.25, 03:47 GMT ]