несколько ошибок компиляции с основным приложением C++ на Бете 1 VS2010

закрытие во многом как объект. Это инстанцируют каждый раз, когда Вы вызываете функцию.

объем закрытие в JavaScript является лексическим, что означает, что все, что содержится в функции закрытие , принадлежит, имеет доступ к любой переменной, которая находится в нем.

переменная А содержится в закрытие

  1. при присвоении его с var foo=1; или
  2. просто запись var foo;

, Если внутренняя функция (функция, содержавшая в другой функции), получает доступ к такой переменной, не определяя его в ее собственном объеме с var, это изменяет содержание переменной во внешнем закрытие .

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

Пример

function example(closure) {
  // define somevariable to live in the closure of example
  var somevariable = 'unchanged';

  return {
    change_to: function(value) {
      somevariable = value;
    },
    log: function(value) {
      console.log('somevariable of closure %s is: %s',
        closure, somevariable);
    }
  }
}

closure_one = example('one');
closure_two = example('two');

closure_one.log();
closure_two.log();
closure_one.change_to('some new value');
closure_one.log();
closure_two.log();

Вывод

somevariable of closure one is: unchanged
somevariable of closure two is: unchanged
somevariable of closure one is: some new value
somevariable of closure two is: unchanged
20
задан jalf 31 August 2009 в 10:25
поделиться

7 ответов

] Что-то не так с вашим путем включения. Используйте параметр «/ showIncludes» («Свойства конфигурации / C / C ++ / Advanced / Show Includes» в параметрах проекта IDE), чтобы увидеть, какие заголовки и откуда включаются.

Подробнее см. В этом вопросе:

4
ответ дан 29 November 2019 в 23:48
поделиться

Вы когда-нибудь собирали проект с предыдущей версией? stdafx.h - это стандартное имя предварительно скомпилированного заголовка для проектов msvc. Если вы построили с VS2008, он мог бы создать предварительно скомпилированный заголовок, и, возможно, VS2010 подбирает его. (Если вы не знакомы, предварительно скомпилированный заголовок - это результат сборки, сгенерированный компилятором, который хранится для ускорения компиляции файлов заголовков при следующей сборке.)

Я бы попробовал очистить, а затем проверить вручную каталог проекта (и каталог вывода сборки, если он находится в неочевидном месте), затем полная сборка. Если бы это не помогло, я бы отключил предварительно скомпилированные заголовки (по крайней мере, временно) в настройках проекта и перестроил.

0
ответ дан 29 November 2019 в 23:48
поделиться

Попробуйте изменить проект -> свойства -> свойства конфигурации -> общие -> Набор символов на «Использовать многобайтовый набор символов»

0
ответ дан 29 November 2019 в 23:48
поделиться

После добавления параметра / showincludes я получил следующий результат:

   1>  Note: including file: c:\testapp\stdafx.h
   1>  Note: including file:  c:\testapp\targetver.h
   1>  Note: including file:   C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\WinSDKVer.h
   1>  Note: including file:   C:\WinDDK\6001.18001\inc\api\SDKDDKVer.h
   1>  Note: including file:  C:\Program Files\Microsoft Visual Studio 10.0\VC\include\stdio.h
   1>  Note: including file:   C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
   1>  Note: including file:    C:\WinDDK\6001.18001\inc\api\sal.h
   1>  Note: including file:    C:\Program Files\Microsoft Visual Studio 10.0\VC\include\vadefs.h

Это имело бы смысл, если по какой-то причине он загружает два файла из пути DDK, а не из каталога VS2010 include, если это на самом деле проблема, как мне сказать ему использовать правильный путь?

0
ответ дан 29 November 2019 в 23:48
поделиться

Проблема здесь: C:\WinDDK\6001.18001\inc\api\sal.h

sal.h определяет аннотации, которые используются в заголовках CRT... DDK включает свой собственный sal.h, который устарел и не содержит всех аннотаций.

Есть 2 возможных решения: - изменить пути включения так, чтобы "C:\Program Files\Microsoft Visual Studio 10.0\VC\include" находился перед "C:\WinDDK\6001.18001\inc\api"

  • просто удалить "C:\WinDDK\6001.18001\inc\api\sal.h" :)
24
ответ дан 29 November 2019 в 23:48
поделиться

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

C: \ users \ username \ appdata \ local \ microsoft \ msbuild \ v4.0 \

Это два файла:

  1. Microsoft.Cpp.Win32.user.props
  2. Microsoft.Cpp.x64.users.props

Отредактируйте переменную IncludePath

Удалите путь DDK, сохраните файл и перезапустил VS2010. Это решило мою проблему для всех новых проектов.

1
ответ дан 29 November 2019 в 23:48
поделиться

Да, смена users.prop работает, но как странно! Вы не можете изменить этот параметр из меню в Visual Studio и не можете перезаписать его в свойствах проекта. Даже если вы удалите настройку, просто введя $ (IncludePath), он, тем не менее, будет использовать путь по умолчанию к DDK.

1
ответ дан 29 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

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