Error c3861 min identifier not found

Я программирую в среде Visual Studio 2017 на C++14. Проблема в том, что когда я пишу std::min и std::max, я получаю сообщение от компилятора "Требуется идентификатор". Это возникает из-за

Я программирую в среде Visual Studio 2017 на C++14.
Проблема в том, что когда я пишу std::min и std::max, я получаю сообщение от компилятора «Требуется идентификатор». Это возникает из-за define, который подставляет вместо имён функций другой код.
Я использую библиотеки glad и glfw3 для работы с OpenGL, а сам define лежит в minwindef.h

#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif

Мне не хочется, чтобы этот define применялся к моему коду. Что я могу сделать?

описание ошибки

αλεχολυτ's user avatar

αλεχολυτ

28.2k10 золотых знаков52 серебряных знака114 бронзовых знаков

задан 18 окт 2021 в 9:19

ATtiny13a -PU's user avatar

1

Начните программу со строки

#define NOMINMAX 

Она отменяет макросы min и max в стандартных заголовочных файлах Windows.

ответ дан 18 окт 2021 в 10:36

Harry's user avatar

HarryHarry

210k15 золотых знаков115 серебряных знаков224 бронзовых знака

Есть несколько способов решения проблемы макросов min, max в заголовочных файлах Windows.

  1. Использовать #define NOMINMAX в коде перед явным или косвенным включением заголовочного файла с определением макросов min, max.

  2. Иногда бывает не сразу очевидно, где именно стоит добавлять #define NOMINMAX, например, если добавление, казалось бы, в правильном месте не решает проблему. Тогда можно попробовать определить NOMINMAX через дополнительный ключ компилятора:

    > cl.exe -DNOMINMAX ...
    

    В Visual Studio это делается через Configuration Properties → C/C++ → Preprocessor → Preprocessor Definitions в свойствах проекта.

  3. При одновременном использовании библиотек, опирающихся на наличие функционала макросов min, max, предыдущее решение может вызывать проблемы типа:

    error C3861: ‘min’: identifier not found

    В таком случае можно дополнить первое решение внесением стандартных функций std::min, std::max в проблемное пространство имён (откуда возникла ошибка «identifier not found»). Например:

    #define NOMINMAX
    #include <algorithm>
    namespace Gdiplus
    {
        using std::min;
        using std::max;
    }
    
  4. Макросы min, max можно вовсе не отменять, а вызовы std::min и std::max обернуть в скобки:

    (std::min)(x, y);
    

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

  5. Локально отменить макрос и после вызова функции вернуть с помощью push_macro/pop_macro:

    max(x, y);                // Подстановка макроса
    #pragma push_macro("max")
    #undef max
    std::max(x, y);           // Вызов функции  
    #pragma pop_macro("max")
    max(x, y);                // Снова подстановка макроса
    
    

ответ дан 19 окт 2021 в 7:55

αλεχολυτ's user avatar

αλεχολυταλεχολυτ

28.2k10 золотых знаков52 серебряных знака114 бронзовых знаков

  • Remove From My Forums
  • Question

  • i am using a standard method max to find max of two arguments. When i compile the same code in VC9 i am getting this error.

    Is this method defined somewhere else in the new compiler??

    Regards,
    Krishna

Answers

  • You’ve neglected to say which compiler/version you were using before,
    and have not shown an example of your code which uses max.

    Have you tried this?

    #include <algorithm>

    std::max()

    — Wayne

    • Marked as answer by

      Wednesday, October 14, 2009 2:08 AM

  • Maybe

    #include <windows.h>

    • Marked as answer by
      Nancy Shao
      Wednesday, October 14, 2009 2:08 AM

  • Hi Krishna,

    1. For max(), You have to include minmax.h .
    2. Yes! its a standard windows header.
    3. Me too had the problem in VC9 and atlast found this header.

    Best Regards,
    Jijo.


    http://weseetips.com[^] Visual C++ tips and tricks. Updated daily.

    • Marked as answer by
      Nancy Shao
      Wednesday, October 14, 2009 2:08 AM

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    error C2143 и error C3861
    , пропустил какой то include? Какой? Help!

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    27.12.11, 14:27

      Junior

      *

      Рейтинг (т): нет

      Изучаю 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


      aster_x



      Сообщ.
      #2

      ,
      27.12.11, 14:49

        А код примера можно посмотреть?


        Flass



        Сообщ.
        #3

        ,
        27.12.11, 14:50

          Junior

          *

          Рейтинг (т): нет

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

          #include <stdio.h>

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

          Но ошибка

          error C2143: syntax error : missing ‘)’ before ‘{‘

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

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

          Добавлено 27.12.11, 14:52
          Код — не вопрос. Уверен, с синтаксисом там всё норм.

          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

            }


          Сыроежка



          Сообщ.
          #4

          ,
          27.12.11, 15:01

            Цитата Flass @ 27.12.11, 14:27

            Изучаю 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

            Добавлено 27.12.11, 15:05

            Цитата Flass @ 27.12.11, 14:50

            if (A[i] { // РУГАЕТСЯ ВОТ ЗДЕСЬ

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


            Flass



            Сообщ.
            #5

            ,
            27.12.11, 15:05

              Junior

              *

              Рейтинг (т): нет

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

              #include «iostream»
              #include «algorithm»
              #include <conio.h>
              #include <stdio.h>

              Добавлено 27.12.11, 15:07

              Цитата Сыроежка @ 27.12.11, 15:01

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

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

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


              Сыроежка



              Сообщ.
              #6

              ,
              27.12.11, 15:13

                Цитата Flass @ 27.12.11, 15:05

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

                Если вы считаете, что такой код вполне законен, то все свои претензии предъявляйте к разработчику компилятора! Я вам ничем помочь не могу.


                Flass



                Сообщ.
                #7

                ,
                27.12.11, 15:17

                  Junior

                  *

                  Рейтинг (т): нет

                  Что делать, я не копенгаген в C++, знаю только самые основы. Всё таки, с одной ошибкой мы разобрались, подскажите как решить вторую. Это пример работавшего у автора кода, дело в том что я не знаю какие он использовал include потому что приведён просто кусок кода и всё. Ёлки — палки, да как вообще такая ошибка может быть?)


                  aster_x



                  Сообщ.
                  #8

                  ,
                  27.12.11, 15:20

                    Попробуйте

                    ExpandedWrap disabled

                        if (A[i]  { // РУГАЕТСЯ ВОТ ЗДЕСЬ

                    Заменить на

                    ExpandedWrap disabled

                        if (A[i])  {


                    Flass



                    Сообщ.
                    #9

                    ,
                    27.12.11, 15:21

                      Junior

                      *

                      Рейтинг (т): нет

                      Цитата Flass @ 27.12.11, 15:17

                      Цитата aster_x @ 27.12.11, 15:17

                      Нет, я думаю дело не в этом. Если поступить как вы советуете, дальше при аналогичных ошибках и исправлении начинаются и вовсе странные вещи, например:

                      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)

                         {


                      aster_x



                      Сообщ.
                      #10

                      ,
                      27.12.11, 15:38

                        я на знаю где вы такой код нашли. Но он вообще не сответсвует не одному стандарту.

                        Что это такое?

                        Должно быть так, как минимум

                        ExpandedWrap disabled

                          for(i=0;;)

                        Добавлено 27.12.11, 15:38
                        дайте ссылку где вы этот «код» откопали.

                        Сообщение отредактировано: aster_x — 27.12.11, 15:38


                        Flass



                        Сообщ.
                        #11

                        ,
                        27.12.11, 15:39

                          Junior

                          *

                          Рейтинг (т): нет

                          То есть эти выражения полностью эквивалентны?


                          aster_x



                          Сообщ.
                          #12

                          ,
                          27.12.11, 15:40

                            Скорее всего этот «код» прошел какую то фильтрацию(наподобие обрезание HTML тегов), после чего пришел в «не употребительное» состояние.


                            Flass



                            Сообщ.
                            #13

                            ,
                            27.12.11, 15:40

                              Junior

                              *

                              Рейтинг (т): нет

                              http://www.hpcc.unn.ru/?dir=273 вот ссылка


                              aster_x



                              Сообщ.
                              #14

                              ,
                              27.12.11, 15:41

                                Цитата Flass @ 27.12.11, 15:39

                                То есть эти выражения полностью эквивалентны?

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

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

                                Добавлено 27.12.11, 15:46

                                Цитата aster_x @ 27.12.11, 15:41

                                for(i=0;i

                                Попробуйте заменить на

                                ExpandedWrap disabled

                                    for(i=0;i<N;++i)

                                Сообщение отредактировано: aster_x — 27.12.11, 15:46


                                Flass



                                Сообщ.
                                #15

                                ,
                                27.12.11, 15:46

                                  Junior

                                  *

                                  Рейтинг (т): нет

                                  Вот оно что!! Спасибо за подсказку, а то у меня уже мозги кипят)

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

                                  Добавлено 27.12.11, 16:07
                                  Вопрос решён

                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                  0 пользователей:

                                  • Предыдущая тема
                                  • C/C++: Общие вопросы
                                  • Следующая тема

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,0519 ]   [ 16 queries used ]   [ Generated: 9.02.23, 12:13 GMT ]  

                                  @SanderBouwhuis

                                  GSL itself should be able to compile out of the box to be used in your applications without any sort of an additional overhead. Is it only when you’re trying to use it in conjunction with windows.h that you’re having issues or are you running into issues in general?

                                  The reason for needing to define NOMINMAX is to prevent macro expansion of all instances of the words min and max. You can think of the preprocessor as a really naive token replacement engine that just says «oh hey, it’s that max keyword thing! I better swap it out.» without taking any context into consideration. So you’ll even see compiler errors if you try invoking std::max from the algorithm header. A search on Github finds about 450k instances of NOMINMAX either surrounding Windows.h includes or as a compile definition, so it’s by no means an isolated issue.

                                  I’m not familiar with GSL-lite, though I had a quick look at it and found that they surround the numeric_limits max call with the parentheses just like how @andreduvoisin suggests to fix it in pr #817. I’m not sure how often the maintainer(s) of gsl-lite updates with changes from this repo or how far it’s diverged.

                                  I am not sure why this is occuring. I declared these functions in the header file and it is defined them in the .cpp file but in the main function it does not recognize them. Did I forget something basic or do something illegal?


                                  The errors:
                                  : error C3861: ‘createAndInitializeTextFile’: identifier not found
                                  : error C3861: ‘enterRecords’: identifier not found
                                  : error C3861: ‘test’: identifier not found
                                  : error C3861: ‘test’: identifier not found
                                  : error C3861: ‘processChoice’: identifier not found


                                  My code for the header file:

                                  class Tools
                                  {
                                  public:
                                  	Tools(int = -1, string = "", int = 0, double = 0.0);	
                                  	void setPartNumber(int);
                                  	int getPartNumber() const;
                                  
                                  	void setToolName(string);
                                  	string getToolName() const;
                                  	void setInStock(int);
                                  	int getInStock() const;
                                  	void setUnitPrice(double);
                                  	double getUnitPrice() const;
                                  
                                  	void createAndInitializeTextFile();
                                  	void enterRecords();
                                  	bool test();
                                  
                                  	void processChoice();
                                  	int enterChoice();
                                  
                                  	void printTextFile(fstream&);
                                  	void updateRecord(fstream&);
                                  	void newRecord( fstream& );
                                  	void deleteRecord( fstream& );
                                  	void outputLine( ostream&, const Tools & );
                                  	int getPart( const char * const );
                                  
                                  private:
                                  	enum Choices { PRINT = 1, UPDATE, NEW, DELETE, END };
                                  	int partNumber;			
                                  	char toolName[20];		
                                  	int inStock;		
                                  	double unitPrice;		
                                  };

                                  Some parts of my member function definitions:

                                  void Tools::enterRecords()
                                  {
                                  	 fstream outTools( "hardware.dat", ios::in | ios::out | ios::binary );
                                  
                                      // exit program if fstream cannot open file
                                      if ( !outTools )
                                      {
                                         cerr << "File could not be opened." << endl;
                                         exit( 1 );
                                      } // end if
                                  
                                      cout << "Enter tool identification number (1 to 100, 0 to end input)n? ";
                                  
                                      // require user to specify account number
                                      Tools tool;
                                  	//cin >> partNumber;
                                  
                                  	partNumber = 3;
                                  	cout << " 3";
                                  
                                  
                                      // user enters information, which is copied into file
                                      while ( partNumber > 0 && partNumber <= 100 )
                                      {
                                  	   // user enters tool name, quantity and unit price
                                         cout << "Enter the tool name, quantity in stock, and the unit price for the tooln? ";
                                         //cin >> setw( 20 ) >> toolName;
                                         //cin >> inStock;
                                         //cin >> unitPrice;
                                  
                                  	   toolName = "Electric Sander";
                                  	   inStock = 7;
                                  	   unitPrice = 57.98;
                                  
                                         // set the record for the part number, tool name, quantity in stock, and unit price
                                         tool.setPartNumber( partNumber );
                                         tool.setToolName( toolName );
                                         tool.setInStock( inStock );
                                         tool.setUnitPrice( unitPrice );
                                  
                                         // seek position in file of user-specified record   
                                         outTools.seekp( ( tool.getPartNumber() - 1 ) * sizeof ( Tools ) );                         
                                  
                                         // write user-specified information in file                   
                                         outTools.write( reinterpret_cast < const char * >( &tool ),sizeof ( Tools) );     
                                                               
                                  
                                         // enable user to enter another account
                                         //cout << "Enter account numbern? ";
                                         //cin >> partNumber;
                                  
                                      } // end while
                                  }
                                  
                                  bool Tools::test()
                                  {
                                     ifstream inTools( "hardware.dat", ios::in | ios::binary );
                                  
                                      // exit program if ifstream cannot open file
                                      if ( !inTools )
                                      {
                                         cerr << "File could not be opened." << endl;
                                         exit( 1 );
                                      } // end if
                                  
                                  	Tools tool;
                                  
                                  	bool answer = false;
                                  	
                                  	if ( tool.getPartNumber() != 0 )
                                  		answer = true;
                                  	else
                                  		answer = false;
                                  
                                  	return answer;
                                  }

                                  My code in .cpp main function, where the error is occurring:

                                  #include "Tools.h"
                                  
                                  int main()
                                  {
                                  	createAndInitializeTextFile();
                                  	enterRecords();
                                  	test();
                                  
                                  	if(test())
                                  	{
                                  		"Hardware program successful.";
                                  		processChoice();
                                  	}
                                  	else
                                  	{
                                  		"Hardware program failed.";
                                  	}
                                  
                                  	cout << endl;
                                  	return 0;
                                  }

                                  Я только начал новый win32 консольное приложение в VS 2010 и установить Additional options собственность на precompiled headerв предстоящем мастере.

                                  На основе один из моих предыдущих вопросов Я решил использовать следующий основной прототип:

                                  int main(int argc,  char* argv[])
                                  

                                  Я также изменил Character Set свойство проекта к Use Multi-Byte Character Set,

                                  Но следующий код:

                                  system("pause");
                                  

                                  Будет выдавать эти две ошибки:

                                  error C3861: 'system': identifier not found
                                  IntelliSense: identifier "system" is undefined
                                  

                                  У меня был такой же опыт, и ошибок не было!
                                  Кто-нибудь может подсказать мне, что не так?

                                  2

                                  Решение

                                  В C ++ вы должны включить соответствующий заголовочный файл, который содержит объявление функции, чтобы использовать ее, иначе вы получите ошибку компилятора о том, что идентификатор не найден.

                                  В случае с system функция, это определено в stdlib.h заголовочный файл

                                  Итак, в начало вашего файла кода (или в вашем предварительно скомпилированном заголовочном файле) добавьте строку

                                  #include <stdlib.h>
                                  

                                  (Вы используете угловые скобки вместо кавычек, потому что stdlib.h найден ли заголовок в том месте, о котором ранее сообщалось инструменту сборки; это включает в себя каталоги системных заголовков и другие каталоги, которые ваша конфигурация сборки специально требует.)

                                  Помимо этого я сильно рекомендую против используя либо многобайтовый набор символов (все новые приложения Windows должны поддерживать Unicode), либо system функция, особенно system("pause"),

                                  7

                                  Другие решения

                                  Для меня работало то, что #include "stdafx.h" был ПЕРВЫЙ ВКЛЮЧЕН в файл. Так #include <iostream> поэтому будет после этого.

                                  Это решило проблему.

                                  3

                                  I’m working on a program that was written by someone else. It is for a research project that builds on the original author’s work.

                                  I didn’t know any c++ before I started, but I know enough about programming to get by for the most part. The problem I’m having at the moment is this:

                                  The code as it is produces 3 voxel grids with the values representing the x, y, and z components of the vector potential of a dipole at the origin respectively. I want to modify the code so that it produces the vector potential of two dipoles, separated by a distance.

                                  The functions that produces the dipole is in a header file. I simply copied the dipole function and renamed it, then altered the code in the renamed version. I wanted to keep the original in there so I could easily call whichever one I wanted.

                                  The problem is that I get an «identifier not found» error when I build the code. I get the same problem for each component of the vector potential, so I will only post the code for one.

                                  The function is called in the main function like this
                                  Dipole_TS_theta4(TS_Proj1, ny, lx, ly, lz, rad_sup);

                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  17
                                  18
                                  19
                                  20
                                  21
                                  22
                                  23
                                  24
                                  25
                                  26
                                  27
                                  28
                                  29
                                  30
                                  31
                                  32
                                  33
                                  34
                                  35
                                  36
                                  37
                                  38
                                  39
                                  40
                                  41
                                  42
                                  43
                                  44
                                  45
                                  void Dipole_TS_theta4(vector<vector<vector<complex<double> > > > &T_Proj,
                                  			 const size_t ny, const double lx,
                                  			 const double ly, const double lz, const double rad_sup)
                                  {
                                  	const size_t nt = T_Proj.size();
                                  	const size_t nz = T_Proj[0].size();
                                  	const size_t nx = T_Proj[0][0].size();
                                  	//
                                  	vector<vector<vector<complex<double> > > > Wx = CreateWF(nx, ny, nz, complex<double>(0,0));
                                  	vector<vector<vector<complex<double> > > > Wy = CreateWF(nx, ny, nz, complex<double>(0,0));
                                  	vector<vector<vector<complex<double> > > > Wz = CreateWF(nx, ny, nz, complex<double>(0,0));
                                  	//
                                  	const double PI = 3.141592653589793;
                                  	const double dth = PI/(nt-1);
                                  	const double h = ly/ny;
                                  	complex<double> XI0, XI1, XI2;
                                  	double theta;
                                  	for(size_t t=0; t<nt; t++)
                                  	{
                                  		theta = t*dth;
                                  		/*
                                  			Find the vector potential, Wx, Wy, and Wz at a particular angle theta
                                  		*/
                                  		FirstProjection_MD4(Wx, Wy, Wz, lx, ly, lz, theta, rad_sup);
                                  		/*
                                  			Project in the -y-direction by integrating in the -y-direction.
                                  			Using composite Simpson's rule
                                  		*/
                                  		for(size_t k=0; k<nz; k++)
                                  		{
                                  			for(size_t i=0; i<nx; i++)
                                  			{
                                  				XI0 = Wy[k][0][i] +Wy[k][ny-1][i];
                                  				XI1 = complex<double>(0,0);
                                  				XI2 = complex<double>(0,0);
                                  				for(size_t j=1; j<ny/2; j++)
                                  				{
                                  					XI2 += Wy[k][2*j][i];
                                  					XI1 += Wy[k][2*j-1][i];
                                  				}
                                  				T_Proj[t][k][i] = -h*(XI0 +2.0*XI2 +4.0*XI1)/3.0;
                                  			}
                                  		}
                                  	}
                                  }
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  17
                                  18
                                  19
                                  20
                                  21
                                  22
                                  23
                                  24
                                  25
                                  26
                                  27
                                  28
                                  29
                                  30
                                  31
                                  32
                                  33
                                  34
                                  35
                                  36
                                  37
                                  38
                                  39
                                  40
                                  41
                                  42
                                  43
                                  44
                                  45
                                  46
                                  47
                                  48
                                  49
                                  50
                                  51
                                  52
                                  53
                                  54
                                  55
                                  56
                                  57
                                  58
                                  59
                                  60
                                  61
                                  62
                                  63
                                  64
                                  65
                                  66
                                  67
                                  void FirstProjection_MD4(vector<vector<vector<complex<double> > > > &Wx, 
                                  				  vector<vector<vector<complex<double> > > > &Wy,
                                  				  vector<vector<vector<complex<double> > > > &Wz, const double lx, const double ly, 
                                  				  const double lz, const double theta, const double rad_sup)
                                  {
                                  	const size_t nz = Wx.size();
                                  	const size_t ny = Wx[0].size();
                                  	const size_t nx = Wx[0][0].size();
                                  	const double dx = lx/nx;
                                  	const double dy = ly/ny;
                                  	const double dz = lz/nz;
                                  	const double x0 = lx/2.0;
                                  	const double y0 = ly/2.0;
                                  	const double z0 = lz/2.0;
                                  	double z, rleft, rleft2, rleft3,rright, rright2, rright3,xleft,y,xright,xleft1,y1,xright1;
                                  	const double R = 10.0;
                                  	const double R2 = R*R;
                                  	const double R3 = R2*R;
                                  	const double mu = 0.04;
                                  	const double reg_param = 0.01;
                                  	const double cos_theta = cos(theta);
                                  	const double sin_theta = sin(theta);
                                  	complex<double> wx, wy;
                                  	for(size_t k=0; k<nz; k++)
                                  	{
                                  		z = k*dz -z0;
                                  		for(size_t j=0; j<ny; j++)
                                  		{
                                  			y= j*dy -y0;
                                  			for(size_t i=0; i<nx; i++)
                                  			{
                                  				xleft = i*dx -3*x0/4;
                                  				//
                                  				xleft1 = xleft*cos_theta -y*sin_theta;
                                  				y1 = xleft*sin_theta +y*cos_theta;
                                  				//
                                  				rleft2 = xleft1*xleft1 + y1*y1 +z*z;
                                  				rleft = sqrt(rleft2);
                                  				rleft3 = rleft2*rleft;	
                                  
                                  				xright = i*dx -x0/4;
                                  				//
                                  				xright1 = xright*cos_theta -y*sin_theta;
                                  				
                                  				//
                                  				rright2 = xright1*xright1 + y1*y1 +z*z;
                                  				rright = sqrt(rright2);
                                  				rright3 = rright2*rright;	
                                  
                                  				/*
                                  					Rotate the wavefield in the xy-plane
                                  				*/
                                  				wx = complex<double>(((-mu/(rleft3/R3 +reg_param))*y1/R)+((-mu/(rright3/R3 +reg_param))*y1/R), 0);
                                  				wy = complex<double>(((mu/(rleft3/R3 +reg_param))*xleft1/R)+((mu/(rleft3/R3 +reg_param))*xleft1/R), 0);
                                  				Wx[k][j][i] = wx*cos_theta +wy*sin_theta;
                                  				Wy[k][j][i] = -wx*sin_theta +wy*cos_theta;
                                  				Wz[k][j][i] = complex<double>(0, 0);
                                  			}
                                  		}
                                  	}
                                  	/*
                                  		Set the wavefield outside a radius rad_sup to zero
                                  	*/
                                  	CircularApertureWF(Wx, 1.0, 1.0, 1.0, 0.5, 0.5, 0.5, rad_sup);
                                  	CircularApertureWF(Wy, 1.0, 1.0, 1.0, 0.5, 0.5, 0.5, rad_sup);
                                  	CircularApertureWF(Wz, 1.0, 1.0, 1.0, 0.5, 0.5, 0.5, rad_sup);
                                  }

                                  I also just noticed that I get the problem even if I only call the original functions (they don’t have the 4 at the end of the name) unless I delete my new attempted definitions from the pvrt.cpp file. If I remove them the code compiles and runs properly. I’ve tried searching but it always turns out to be a typo or something that causes the error, and I can’t see a typo in my code. Hopefully someone can help out. Thanks in advance :)

                                  Понравилась статья? Поделить с друзьями:
                                • Error c3861 gets идентификатор не найден
                                • Error c3861 getline идентификатор не найден
                                • Error c3861 getch идентификатор не найден
                                • Error c3861 fact
                                • Error c3861 cpuid идентификатор не найден