макрос “макс.” требует 2 аргументов, но только 1 данного

Ответ Servy был правильным, мне нужно было изменить мой общий DbSet на следующий, и подсчет сработал:

 public static DbSet<T> MockDbSet<T>(params T[] items) where T : class
    {
        IEnumerable<T> ts = items;
        var mock = new Mock<DbSet<T>>();
        mock.As<IQueryable<T>>().Setup(x => x.GetEnumerator()).Returns(ts.GetEnumerator());
        mock.As<IQueryable<T>>().Setup(x => x.Provider).Returns(items.AsQueryable().Provider);
        mock.As<IQueryable<T>>().Setup(x => x.Expression).Returns(items.AsQueryable().Expression);
        mock.As<IQueryable<T>>().Setup(x => x.ElementType).Returns(items.AsQueryable().ElementType);

        return mock.Object;
    }
6
задан 5 February 2009 в 23:46
поделиться

4 ответа

Я нахожу много #defines, с которыми Вы встречаетесь, после того как Вы включали windows.h очень тревожащий (не только макс. и минута, но и у меня также были проблемы с другими универсальными словами как Прямоугольник, если я не ошибаюсь). Поэтому я разработал привычку включать windows.h только при необходимости, и никогда в заголовочных файлах. Это уменьшает боль до небольшого количества файлов C++, которые являются определенными для платформы.

К сожалению, некоторые библиотеки повышения (я верю потоку, и asio) действительно включают windows.h в их заголовки, и я все еще сталкиваюсь с этим видом глупых проблем время от времени.

Моим решением для остатка от ситуаций, где это вызывает проблемы, являются к #undef проблематичные символы после включения заголовочных файлов.

6
ответ дан 8 December 2019 в 13:03
поделиться

Это - названный макрос max это входит в путь, как Adam объяснил. Другое решение (больше "текущие исправления") может состоять в том, чтобы поместить круглые скобки вокруг функции, препятствовать тому, чтобы она рассматривалась как макро-вызов:

return std::log((std::numeric_limits<result_type>::max)());
2
ответ дан 8 December 2019 в 13:03
поделиться

Поскольку другие отметили, включая windows.h вероятно, Ваша проблема. Microsoft обеспечивает средство "выключить" части windows.h с символами препроцессора. Можно определить эти символы как часть сборки или непосредственно в коде.

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

Вот то, как пропустить определение min или max как макросы:

#define NOMINMAX
#include <windows.h>

Обратите внимание, что многие включают файлы, будет, в какой-то момент, включать windows.h. В таких случаях, настраивающих Ваш, определяет на более глобальном уровне, может быть более удобным.

Если Вы перерываете windows.h, можно найти набор других символов препроцессора (например, NOOPENFILE, NOKANJI, NOKERNEL и многие другие), который может часто быть полезным.

3
ответ дан 8 December 2019 в 13:03
поделиться

Вы включаете заголовочный файл где-нибудь это #defines max как макрос. Лучшее решение состояло бы в том, чтобы выяснить, где оно определяется, и запретите ему то, чтобы быть определенным, если это возможно. С другой стороны, Вы могли просто #undef это:

#include <evil_header_which_defines_max.h>
#undef max
7
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

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