Combaseapi h 229 error c2760

Hi, still can't get the copter working. I did find a fix for the C2670 error though. Any thoughts appreciated. Win 10 Home Unity 2018.2.15f1 VS Community 2017 15.8.9 SDK 8.1 Unity/build.cmd Bui...

Hi, still can’t get the copter working. I did find a fix for the C2670 error though. Any thoughts appreciated.

Win 10 Home
Unity 2018.2.15f1
VS Community 2017 15.8.9
SDK 8.1

Unity/build.cmd Build fails with:
windows kits8.1includeumcombaseapi.h(229): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’

Fix suggested here:
https://developercommunity.visualstudio.com/content/problem/185399/error-c2760-in-combaseapih-with-windows-sdk-81-and.html

1: Open (make backup first of course) C:Program Files (x86)Windows Kits8.1Includeumcombaseapi.h
2: Add struct IUnknown; // Workaround for «combaseapi.h(229): error C2187: syntax error: ‘identifier’ was unexpected here» when using /permissive-
3: Put this line at top of file above includes
4: Rebuild
5: Build succeeds but with warning:

Build succeeded.

«..PathAirSimUnityAirLibWrapperAirsimWrapper.sln» (Clean;Build target) (1) ->
«..PathAirSimUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj.metaproj» (default ta
rget) (2:2) ->
«..PathAirSimUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj» (default target) (5:
2) ->
(Link target) ->
LINK : warning LNK4075: ignoring ‘/INCREMENTAL’ due to ‘/LTCG’ specification [..PathAirSi
mUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj]

6: Run project SimModeSelector Unity Project Warning:
Cannot read settings file C:Program FilesUnityEditorsettings.json Vehicle=SimpleFlight
UnityEngine.Debug:LogError(Object)
AirSimUnity.Vehicle:PrintLogMessage(String, String, String, Int32) (at Assets/AirSimAssets/Scripts/Vehicles/Vehicle.cs:279)
AirSimUnity.VehicleCompanion:PrintLogMessage(String, String, String, Int32) (at Assets/AirSimAssets/Scripts/Vehicles/VehicleCompanion.cs:193)

7: Create settings.json file in Assets folder:
{
«SettingsVersion»: 1.2,
«SimMode»: «Multirotor»
}

8: Run Unity Project SimModeSelector. Copter does not respond to Page Up/Down & WASD
Car responds to WASD

Содержание

  1. Unity — Fix for Build Error C2760 in combaseapi.h — but still not working #1550
  2. Comments
  3. Библиотека GDI+ вызывает ошибку C2760: синтаксическая ошибка: неожиданный «идентификатор» токена, ожидаемый «описатель типа» в VS2017 при компиляции для XP
  4. Ответы (4)
  5. Библиотека GDI+ вызывает «ошибку C2760: синтаксическая ошибка: неожиданный токен» идентификатор «, ожидаемый» спецификатор типа «» в VS2017 при компиляции для XP
  6. 4 ответа
  7. Библиотека GDI + вызывает ошибку C2760: синтаксическая ошибка: неожиданный токен «идентификатор», ожидаемый «спецификатор типа» »в VS2017 при компиляции для XP
  8. Как создать проект C++, отличный от MFC, со статической привязкой к библиотекам времени выполнения VC?

Unity — Fix for Build Error C2760 in combaseapi.h — but still not working #1550

Hi, still can’t get the copter working. I did find a fix for the C2670 error though. Any thoughts appreciated.

Win 10 Home
Unity 2018.2.15f1
VS Community 2017 15.8.9
SDK 8.1

Unity/build.cmd Build fails with:
windows kits8.1includeumcombaseapi.h(229): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’

1: Open (make backup first of course) C:Program Files (x86)Windows Kits8.1Includeumcombaseapi.h
2: Add struct IUnknown; // Workaround for «combaseapi.h(229): error C2187: syntax error: ‘identifier’ was unexpected here» when using /permissive-
3: Put this line at top of file above includes
4: Rebuild
5: Build succeeds but with warning:

«..PathAirSimUnityAirLibWrapperAirsimWrapper.sln» (Clean;Build target) (1) ->
«..PathAirSimUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj.metaproj» (default ta
rget) (2:2) ->
«..PathAirSimUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj» (default target) (5:
2) ->
(Link target) ->
LINK : warning LNK4075: ignoring ‘/INCREMENTAL’ due to ‘/LTCG’ specification [..PathAirSi
mUnityAirLibWrapperAirsimWrapperAirsimWrapper.vcxproj]

6: Run project SimModeSelector Unity Project Warning:
Cannot read settings file C:Program FilesUnityEditorsettings.json Vehicle=SimpleFlight
UnityEngine.Debug:LogError(Object)
AirSimUnity.Vehicle:PrintLogMessage(String, String, String, Int32) (at Assets/AirSimAssets/Scripts/Vehicles/Vehicle.cs:279)
AirSimUnity.VehicleCompanion:PrintLogMessage(String, String, String, Int32) (at Assets/AirSimAssets/Scripts/Vehicles/VehicleCompanion.cs:193)

7: Create settings.json file in Assets folder:
<
«SettingsVersion»: 1.2,
«SimMode»: «Multirotor»
>

8: Run Unity Project SimModeSelector. Copter does not respond to Page Up/Down & WASD
Car responds to WASD

The text was updated successfully, but these errors were encountered:

Источник

Библиотека GDI+ вызывает ошибку C2760: синтаксическая ошибка: неожиданный «идентификатор» токена, ожидаемый «описатель типа» в VS2017 при компиляции для XP

Я пытаюсь включить следующие определения для GDI+ в свой проект Win32 C++, скомпилированный в Visual Studio 2017:

Мне нужно скомпилировать этот проект для поддержки Windows XP. Итак, в свойствах проекта я выбрал: Platform Toolset как Visual Studio 2017 — Windows XP (v141_xp) :

Но когда я компилирую его, библиотека GDI+ дает мне это:

Есть идеи, как это исправить?

Ответы (4)

Добавьте эту строку перед самым первым (!) #include заголовком, связанным с COM, чтобы исправить objbase.h(239): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’ :

Это исправление работает, потому что строка в objbase.h(239) , упомянутая в ошибке, содержит static_cast (*pp); , несмотря на то, что IUnknown еще не был объявлен в этом месте.

Я как бы получил его для компиляции, но это определенно не очень хорошее решение. Я публикую это здесь в качестве временного обходного пути, пока Microsoft не вылезет из головы. Также, если кто-то найдет лучший способ, пожалуйста, дайте мне знать.

По сути, мне пришлось понизить весь проект до Visual Studio 2015 — Windows XP (v140_xp) только для того, чтобы скомпилировать одну плохо написанную библиотеку:

Это создало собственную проблему с библиотеками std :

Поэтому мне пришлось шунтировать эти ошибки небезопасных функций:

Что далеко от идеала!

(По сути, вы жертвуете безопасностью приложения только для того, чтобы скомпилировать эту чертову библиотеку GDI+.)

Есть способ заставить это работать, если вы готовы редактировать заголовочные файлы Windows.

В objbase.h закомментируйте строку 239 или измените ее на:

В gdiplusheaders.h , строка 891, удалите лишний квалификатор ( Metafile:: ).

В gdiplusstringformat.h , строка 220, удалите лишний квалификатор ( StringFormat:: ).

Надеюсь, это исправит ситуацию для вас, ничего не сломав.

Хотя вопрос старый, просто добавляю то, что сработало для меня.

В моем случае включение windows.h и компиляция с набором инструментов VS2017 v141_xp вызывали у меня ошибку: синтаксическая ошибка: неожиданный «идентификатор» токена, ожидаемый «спецификатор типа».

Источник

Библиотека GDI+ вызывает «ошибку C2760: синтаксическая ошибка: неожиданный токен» идентификатор «, ожидаемый» спецификатор типа «» в VS2017 при компиляции для XP

Я пытаюсь включить следующие определения для GDI+ в мой проект Win32 C++, который скомпилирован в Visual Studio 2017:

Мне нужно скомпилировать этот проект для поддержки Windows XP. Поэтому в свойствах проекта я выбрал: Platform Toolset как Visual Studio 2017 — Windows XP (v141_xp) :

Но когда я компилирую это, библиотека GDI+ дает мне это:

Есть идеи как это исправить?

4 ответа

Добавьте эту строчку перед самым первым (!) #include заголовка, связанного с COM, чтобы исправить objbase.h(239): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’ :

Это исправление работает, потому что строка в objbase.h(239) упомянутый в ошибке содержит static_cast (*pp); несмотря на то, что IUnknown до сих пор не объявлен в этом месте.

Я вроде получил его для компиляции, но это определенно не хорошее решение. Я опубликую его здесь как временное решение, пока Microsoft не избавится от своих ___ идей. Также, если кто-нибудь найдет лучший способ, пожалуйста, дайте мне знать.

Я в основном должен был понизить весь проект до Visual Studio 2015 — Windows XP (v140_xp) просто скомпилировать одну плохо написанную библиотеку:

Это создало собственную проблему с std библиотеки:

Таким образом, я должен был избежать ошибок небезопасных функций:

Что далеко от идеала!

(Вы в основном жертвуете безопасностью приложения, просто чтобы скомпилировать эту чертову библиотеку GDI+.)

Есть способ заставить это работать, если вы готовы редактировать заголовочные файлы Windows.

В objbase.h закомментируйте строку 239 или измените ее на:

В gdiplusheaders.h , строка 891, удалите лишний квалификатор ( Metafile:: ).

В gdiplusstringformat.h , строка 220, удалите лишний классификатор ( StringFormat:: ).

Надеюсь, это исправит ситуацию, не сломав ничего.

Хотя вопрос старый, просто добавляю то, что сработало для меня.

В моем случае включение windows.h и компиляция с набором инструментов VS2017 v141_xp вызывали у меня ошибку: синтаксическая ошибка: неожиданный «идентификатор» токена, ожидаемый «описатель типа».

Источник

Библиотека GDI + вызывает ошибку C2760: синтаксическая ошибка: неожиданный токен «идентификатор», ожидаемый «спецификатор типа» »в VS2017 при компиляции для XP

Я пытаюсь включить следующие определения для GDI + в свой проект Win32 C ++, который скомпилирован в Visual Studio 2017:

Мне нужно скомпилировать этот проект для поддержки Windows XP. Итак, в выбранном мной проекте свойства: Platform Toolset как Visual Studio 2017 — Windows XP (v141_xp) :

Но когда я его компилирую, библиотека GDI + дает мне следующее:

Есть идеи, как это исправить?

Добавьте эту строку перед самым первым (!) #include Заголовком, связанным с COM, чтобы исправить objbase.h(239): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’ :

Это исправление работает, потому что строка, objbase.h(239) упомянутая в ошибке, содержит, static_cast (*pp); несмотря на то, что IUnknown еще не был объявлен в этом месте.

Мне удалось его скомпилировать, но это определенно не лучшее решение. Я публикую это здесь как временный обходной путь, пока Microsoft не избавится от своих ___es. Также, если кто-нибудь найдет способ получше, дайте мне знать.

Мне в основном пришлось понизить версию всего проекта, чтобы Visual Studio 2015 — Windows XP (v140_xp) просто скомпилировать одну плохо написанную библиотеку:

Это создало собственную проблему с std библиотеками:

Поэтому мне пришлось устранить эти ошибки небезопасных функций:

Что далеко не идеально!

(По сути, вы жертвуете безопасностью приложения только для того, чтобы скомпилировать эту чертову библиотеку GDI +.)

Источник

Как создать проект C++, отличный от MFC, со статической привязкой к библиотекам времени выполнения VC?

Я знаю, что для проекта MFC, созданного с помощью Visual Studio, можно перейти в свойства проекта, а затем Configuration Properties -> General -> use of MFC и изменить его на Use MFC in a static library :

Это работает, если полученная сборка должна запускаться в более ранних версиях Windows без необходимости установки DLL времени выполнения MFC или VC. Полученная сборка будет использовать библиотеки DLL, которые уже присутствуют в каждой установке Windows, начиная с Windows 7 и выше. (Возможно, даже до Windows XP.)

Теперь, если я создаю проект без MFC, скажем, тестовое консольное приложение C++, параметр для использования MFC настроен как «Использовать стандартные библиотеки Windows»:

Но если я запустил полученный двоичный файл, скажем, при новой установке Windows 7, я получаю такую ​​ошибку:

Итак, покопавшись в настройках, я не смог найти способ скомпилировать его со статической привязкой ко всем этим новым версиям библиотек VC RT. Он есть, а я его просто не вижу?

PS. Покопавшись дальше, я обнаружил, что могу изменить «Platform Toolset» на Visual Studio 2017 — Windows XP (v141_xp) , предполагая, что это сделает его обратно совместимым с Windows XP и выше:

Но затем, если я его скомпилирую, я получаю следующие ошибки:

В этой части файла ObjBase.h , который не имеет ничего общего с моим тестовым консольным проектом C++, который я только что создал из шаблона Visual Studio:

Итак, мой вопрос: могу ли я создать проект на C++, отличный от MFC, который может работать в более старых версиях Windows без необходимости установки VC Runtime или каких-либо других дополнительных библиотек?

Источник

  • Remove From My Forums
  • Question

  • Hi All,

    I’m trying to use this piece of code in a Windows C++ lib project. This is working in a Windows C++ desktop project without problems (clean instance of a new Desktop project, no extra additions) but in a Windows lib or Windows command line
    project (also clean projects) I get this C3861 error.

    The Intellisense in VS 2017 is finding all definition pieces correctly, the GUID, the HRESULT and the CoCreateGuid() function.

    But compiling is not possible.

    Any ideas? Thanks in advance.

        #include <combaseapi.h>

        GUID objGuid;
        HRESULT result = CoCreateGuid(&objGuid);

Answers

  • I cannot reproduce it in a Console project with VS 2015

    I use 

    #include  <Objbase.h>

    which declares CoCreateGuid  in 

    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)

    • Marked as answer by

      Monday, November 5, 2018 7:05 PM

  • Hi,

    Thanks for posting here.

    >>C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’

    I reproduce your issue, when I set the Windows SDK version as 8.1, I get the error:

    c:program files (x86)windows kits8.1includeumcombaseapi.h(229): error C2760: syntax error: unexpected token ‘identifier’, expected ‘type specifier’

    but it works fine in both console project and static library project when I set the Windows SDK version as
    10.0.15063.0 or 10.0.17134.0.

    Does this error goes away when removing the /premissive- compiler flag? If so, I suggest you refer to this

    blog and issue.

    Or I think maybe you could try to use high Windows SDK version.

    Hope these will help you.

    Best Wishes,

    Jack Zhang


    MSDN Community Support Please remember to click «Mark as Answer» the responses that resolved your issue, and to click «Unmark as Answer» if not. This can be beneficial to other community members reading this thread. If you have any compliments
    or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • Edited by
      Jack Zhang — AAA
      Monday, November 5, 2018 2:38 AM
    • Marked as answer by
      Paul Live
      Monday, November 5, 2018 7:05 PM

@TOCПодскажите при компиляции exosip:

combaseapi.h (229): ошибка C2760: синтаксическая ошибка: непредвиденный «идентификатор» токена, ожидаемый токен — «спецификатор типа»

Решение:

Откройте проект проекта -> Свойства -> c / c ++ -> Голос -> Режим соответствия и измените его на Нет
С функцией sleep () есть много ошибок. В режиме сна первая буква в Windows должна начинаться с заглавной.

Добро пожаловать в редактор Markdown

Привет! Вы впервые используетеРедактор Markdown Отображается страница приветствия. Если вы хотите узнать, как использовать редактор Markdown, вы можете внимательно прочитать эту статью, чтобы узнать об основном синтаксисе Markdown.

Новое изменение

Мы выполнили некоторые расширения функций и поддержку грамматики в редакторе Markdown. В дополнение к стандартным функциям редактора Markdown мы добавили следующие новые функции, которые помогут вам использовать его в блогах:

  1. Совершенно новый дизайн интерфейса , Принесет новый опыт письма;
  2. Установите свой любимый стиль выделения кода в центре создания, MarkdownОтобразить выбранный стиль выделения фрагмента кода Дисплей
  3. вырос Перетаскивание изображения Функция, вы можете напрямую перетащить локальное изображение в область редактирования для прямого отображения;
  4. Совершенно новыйМатематическая формула KaTeX грамматика;
  5. Добавлена ​​поддержкаСинтаксис русалки диаграммы Ганта1 Характеристики;
  6. вырос Мультиэкранное редактирование Функция Markdown article;
  7. вырос Режим фокусировки записи, режим предварительного просмотра, режим краткого письма, синхронные настройки колеса прокрутки для левой и правой областей Функциональная кнопка расположена между областью редактирования и областью предварительного просмотра;
  8. вырос Контрольный список Характеристики.

Ярлык функции

Изымать:Ctrl/Command + Z
Повторить:Ctrl/Command + Y
Полужирный:Ctrl/Command + B
Курсив:Ctrl/Command + I
Заголовок:Ctrl/Command + Shift + H
Неупорядоченный список:Ctrl/Command + Shift + U
Упорядоченный список:Ctrl/Command + Shift + O
Контрольный список:Ctrl/Command + Shift + C
Вставьте код:Ctrl/Command + Shift + K
Вставить ссылку:Ctrl/Command + Shift + L
Вставить картинку:Ctrl/Command + Shift + G

Разумное создание названия поможет формированию каталога.

Введите сразу один раз#И нажмитеspaceПосле этого будет сгенерирован заголовок уровня 1.
Введите 2 раза#И нажмитеspaceПосле этого будут сгенерированы заголовки уровня 2.
и т. д., мы поддерживаем заголовки уровня 6. Помогите использоватьTOCПосле грамматики создается идеальный каталог.

Как изменить стиль текста

Выделенный текст Выделенный текст

Жирный текст Жирный текст

Текст разметки

Удалить текст

Цитируемый текст

H2O жидкий.

210 Результат операции — 1024.

Вставить ссылку и изображение

Ссылка на сайт:link.

Картина:Alt

Картинка с размерами:Alt

Изображение по центру:Alt

Центрированные и размерные изображения:Alt

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

Как вставить красивый фрагмент кода

идти сНастройки блогаСтраница, выберите стиль выделения фрагментов кода, который вам нравится, такое же выделение показано нижеЧасть кода.

// An highlighted block
var foo = 'bar';

Составьте список, который вам подходит

  • Проект
    • Проект
      • проект
  1. Пункт 1
  2. Пункт 2
  3. Пункт 3
  • Дела по расписанию
  • Миссия выполнена

Создать таблицу

Простая таблица создается так:

проект Value
компьютер $1600
Сотовый телефон $12
катетер $1

Содержание настройки по центру, слева, справа

использовать:---------:По центру
использовать:----------Налево
использовать----------:Правильно

Первый ряд Второй столбец Третий столбец
Первый столбец текста центрируется Второй столбец текста справа Остался третий столбец текста

SmartyPants

SmartyPants преобразует знаки препинания ASCII в «умные» печатные знаки пунктуации HTML. Например:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

Создайте собственный список

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

Как создать сноску

Текст со сносками.2

Комментарии также необходимы

Markdown преобразует текст вHTML

Математическая формула KaTeX

Вы можете отображать математические выражения LaTeX, используяKaTeX:

Отображение формулы гаммы

Γ

(

n

)

=

(

n

1

)

!

n

N

Gamma(n) = (n-1)!quadforall ninmathbb N

Проходит через интеграцию Эйлера

Γ

(

z

)

=

0

t

z

1

e

t

d

t
&ThinSpace;

.

Gamma(z) = int_0^infty t^{z-1}e^{-t}dt,.

Вы можете найти дополнительную информацию оLaTeX Математическое выражениеhere.

Новая функция диаграммы Ганта для обогащения ваших статей

Mon 06

Mon 13

Mon 20

завершено

обработка

План один

План второй

Существующая задача

Adding GANTT diagram functionality to mermaid

  • ОколоДиаграмма Ганта Грамматический справочникВот,

Диаграмма UML

Для визуализации можно использовать диаграммы UML.MermaidНапример, диаграмма последовательности сгенерирована следующим образом:

Чжан Сан

Ли Си

Ван Ву

Привет! Ли Си, как твои дела?

Как дела, Ван Ву?

Я в порядке, спасибо!

Я в порядке, спасибо!

Ли Си долго думал,

Текст слишком длинный

Не влезает в одну строчку.

Глядя на Ван У …

Очень хорошо … Ван Ву, как ты?

Чжан Сан

Ли Си

Ван Ву

Это создаст блок-схему. :

ссылка на сайт

прямоугольник

круглый

Прямоугольник с закругленными углами

алмаз

  • ОколоMermaid Грамматический справочникВот,

Блок-схема блок-схемы

Мы по-прежнему будем поддерживать блок-схему блок-схемы:

Created with Raphaël 2.2.0

Начало

Моя операция

подтвердить?

Конец

yes

no

  • ОколоБлок-схема блок-схемы Грамматический справочникВот.

Экспорт и импорт

Экспорт

Если вы хотите попробовать этот редактор, вы можете редактировать эту статью по своему желанию. Когда вы закончите писать статью, найдите ее на верхней панели инструментов.Экспорт статьи , Создайте файл .md или .html для локального сохранения.

Импортировать

Если вы хотите загрузить файл .md или .html, который вы написали, вы можете выбрать функцию импорта на верхней панели инструментов, чтобы импортировать файл с соответствующим расширением.
Продолжайте создание.


  1. описание синтаксиса русалки ↩︎

  2. Пояснение к сноске↩︎

I’m trying to include the following definitions for GDI+ into my Win32 C++ project that is compiled under Visual Studio 2017:

#include <objidl.h>
#include <gdiplus.h>
#pragma comment (lib,"Gdiplus.lib")

I need to compile this project to support Windows XP. So in the project properies I selected: Platform Toolset as Visual Studio 2017 - Windows XP (v141_xp):

enter image description here

But when I compile it the GDI+ library gives me this:

1>c:program files (x86)microsoft sdkswindowsv7.1aincludeobjbase.h(239): error C2760: syntax error: unexpected token 'identifier', expected 'type specifier'
1>c:program files (x86)microsoft sdkswindowsv7.1aincludegdiplusheaders.h(891): error C4596: 'EmfToWmfBits': illegal qualified name in member declaration
1>c:program files (x86)microsoft sdkswindowsv7.1aincludegdiplusstringformat.h(220): error C4596: 'GetTrimming': illegal qualified name in member declaration

Any idea how to fix this?

asked Jul 12, 2019 at 22:41

c00000fd's user avatar

1

Add this line before the very first(!) #include of COM-related header to fix objbase.h(239): error C2760: syntax error: unexpected token 'identifier', expected 'type specifier' :

typedef struct IUnknown IUnknown;

This fix works, because the line in objbase.h(239) mentioned in the error contains static_cast<IUnknown*>(*pp); despite that IUnknown still haven’t been declared in that place.

answered Jun 12, 2020 at 17:31

Кое Кто's user avatar

Кое КтоКое Кто

4275 silver badges8 bronze badges

I kinda got it to compile, but this is definitely not a good solution. I’m posting it here as a temp workaround until Microsoft gets their heads out of their ___es. Also if anyone finds a better way, please let me know.

I basically had to downgrade the entire project to Visual Studio 2015 - Windows XP (v140_xp) just to compile one badly written library:

enter image description here

This created a problem of its own with the std libraries:

1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdio(50): error C4995: 'sprintf': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstdio(53): error C4995: 'vsprintf': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstring(20): error C4995: 'strcat': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecstring(21): error C4995: 'strcpy': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar(29): error C4995: 'swprintf': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar(30): error C4995: 'vswprintf': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar(32): error C4995: 'wcscat': name was marked as #pragma deprecated
1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludecwchar(34): error C4995: 'wcscpy': name was marked as #pragma deprecated

So I had to shunt those errors of unsafe functions:

#pragma warning( push )
#pragma warning( disable: 4995 )
#include <stdio.h>
#include <new>
#include <string>
#pragma warning( pop )

Which is far from ideal!

(You’re basically sacrificing security of the app just to compile that damn GDI+ library.)

answered Jul 13, 2019 at 20:57

c00000fd's user avatar

c00000fdc00000fd

20.2k23 gold badges168 silver badges385 bronze badges

1

There’s a way to get this to work if you’re prepared to edit the Windows header files.

In objbase.h, comment out line 239 or change it to:

static_assert (std::is_base_of <IUnknown *, *pp>::value, "pp must derive from IUnknown");

In gdiplusheaders.h, line 891, remove the redundant qualifier (Metafile::).

In gdiplusstringformat.h, line 220, remove the redundant qualifier (StringFormat::).

Hopefully, that will fix things for you without breaking anything.

answered Jul 13, 2019 at 23:23

Paul Sanders's user avatar

Paul SandersPaul Sanders

22.9k4 gold badges25 silver badges48 bronze badges

1

Although the question is old, just adding what worked for me.

In my case including windows.h and compiling with VS2017 v141_xp toolset was causing me error: syntax error: unexpected token ‘identifier’, expected ‘type specifier’.

This resolved my issue link

answered Jul 15, 2021 at 15:43

Ishwar's user avatar

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

Edit: I managed to figure out the error. Didn’t check the d3d11.lib spelling, I used ll instead of 11…

I’ve been following a tutorial on getting a DirectX11 (www.directxtutorial.com) and when trying to execute the code I keep getting the error

syntax error: unexpected token 'identifier', expected 'type specifier' - combaseapi.h - Line 229
And that’s building the project on Windows SDK Version 8.1

When running on Windows SDK 10.0.16299.0, I get the error 'cannot open file d3d11.lib'
Both versions are running on 32-bit, even running on 64-bit, I get the errors too.

There’s no error in the code that’s shown.

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//Include Windows header files
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <d3d11.h>
#include <d3dcompiler.h>

//#include <d3dx11.h> - Deprecated
//#include <d3dx10.h>

//include the Direct3D library file
#pragma comment (lib, "d3dll.lib")
//#pragma comment (lib, "d3dx11.lib")
//#pragma comment (lib, "d3dx10.lib")

//global declarations
IDXGISwapChain *swapChain;
ID3D11Device *dev;
ID3D11DeviceContext *devcon;

//function prototypes
void InitD3D(HWND hWnd);
void CleanD3D(void);

//The WindowProc function prototype
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);


//Entry point for any windows program
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	//Handle for the window
	HWND hWnd;
	//struct holds information for the window class
	WNDCLASSEX wc;

	//Clear out the wndow class for use
	ZeroMemory(&wc, sizeof(WNDCLASSEX));

	//fill in the stuct with the needed information
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
	wc.lpszClassName = L"WindowClass1";

	//register the window class
	RegisterClassEx(&wc);

	RECT wr = { 0,0,500,400 }; //Set the size, but not the position
	AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);

	//create the window and use the result as the handle
	hWnd = CreateWindowEx(NULL, L"WindowClass1", L"First Windows Program",
		WS_OVERLAPPEDWINDOW,
		300,
		300,
		wr.right - wr.left, //width of the window
		wr.bottom - wr.top, //Height of the window
		NULL,
		NULL,
		hInstance,
		NULL);

	//display the window on the screen
	ShowWindow(hWnd, nCmdShow);

	//Setup and initialize Direct3D
	InitD3D(hWnd);
	//enter the main loop:

	//this struct holds windows event messages
	MSG msg = { 0 };

	//wait for the next message in the queue - store the result in 'msg'
	while (TRUE)
	{
		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			//Translate keystroke message into the right format
			TranslateMessage(&msg);

			//send the message to the WindowProc Function
			DispatchMessage(&msg);

			//check to see if it's time to quit
			if (msg.message == WM_QUIT)
				break;
		}
		else {
			// Run Game Code...
			// ...
			// ...
		}
	}
	//Clean up DirectX and COM
	CleanD3D();
	//return this part of the WM_QUIT message to windows
	return msg.wParam;
}

//this is the main message handler for the program
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	//sort through and find what code to run for the message given
	switch (message)
	{
		//this message is read when the window is closed
		case WM_DESTROY:
		{
			//Close the application entirely 
			PostQuitMessage(0);
			return 0;
		} break;
	}
	//Handle any messages the switch statement didn't
	return DefWindowProc(hWnd, message, wParam, lParam);
}

//This function initializes and prepares Direct3D for use
void InitD3D(HWND hWnd)
{
	//Create a struct to hold information about the swap chain
	DXGI_SWAP_CHAIN_DESC scd;

	//Clear out the struct for use
	ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC));

	//Fill the swap chain description struct
	scd.BufferCount = 1;
	scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
	scd.OutputWindow = hWnd;
	scd.SampleDesc.Count = 4;
	scd.Windowed = TRUE;

	//create a device, device context and swap chain using the information in the 'scd' struct
	D3D11CreateDeviceAndSwapChain(NULL,
		D3D_DRIVER_TYPE_HARDWARE,
		NULL,
		NULL,
		NULL,
		NULL,
		D3D11_SDK_VERSION,
		&scd,
		&swapChain,
		&dev,
		NULL,
		&devcon);
}

//this is the function that cleans up Direct3D and COM
void CleanD3D(void)
{
	//close and release all exisiting COM objects
	swapChain->Release();
	dev->Release();
	devcon->Release();
}

holdem_

0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

1

04.05.2019, 22:41. Показов 6992. Ответов 12

Метки ООП, шаблоны (Все метки)


При компиляции выдает ошибку : Ошибка C2760 синтаксическая ошибка: ожидался токен «спецификатор типа», а не «идентификатор» .

C++
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//matrix.cpp
#include"matrix.h"
template <class T>
Matrix<T>::Matrix()
{
    size_col = 0;
    size_row = 0;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
}
//конструктор з параметрами
template <class T>
Matrix<T>::Matrix(int size_row_BuUser, int size_col_BuUser)
{
    size_row = size_col_BuUser;
    size_col = size_row_BuUser;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = 0;
            }
    }
    cout << "Matrix for random enter - 1nMatrix for user enter -2" <<
        endl << "Please enter:";
    int l = 1;
    cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                cout << "a[" << i << "]" << "[" << j << "]" << "=";
                cin >> m_iArr[i][j];
            }
        break;
    }
}
template<class T>
Matrix<T>::Matrix(Matrix<T>& init)
{
    if (&m_iArr != 0)
    {
        for (int j = 0; j < size_row; j++)
        {
            delete &m_iArr[j];
        }
        delete[] m_iArr;
    }
    size_row = init.size_row;
    size_col = init.size_col;
    m_iArr = new init.T*[size_row];
    for (int i = 0; i < size_row; i++)
    {
            m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = init.m_iArr[i][j];
        }
}
 
template<class T>
Matrix<T>::~Matrix()
{
    for (int j = 0; j < size_row; j++)
    {
        delete m_iArr[j];
    }
    delete[] m_iArr;
}
template <class T>
ostream& operator<<(ostream& output, Matrix<T>& matr)
{
    for (int i = 0; i < matr.size_row; i++)
    {
        for (int j = 0; j < matr.size_col; j++)
        {
            output << matr.m_iArr[i][j] << " ";
        }
        output << endl;
    }
    output << endl;
    return output;
}
template<class T>
Matrix<T>& Matrix<T>::operator= (Matrix<T>& matr)
{
    if (this != &matr)
    {
        if (&m_iArr != 0)
        {
            for (int j = 0; j < size_row; j++)
            {
                delete m_iArr[j];
            }
            delete[] m_iArr;
        }
        size_row = matr.size_row;
        size_col = matr.size_col;
        m_iArr = new T *[size_row];
        for (int i = 0; i < size_row; i++)
        {
            m_iArr[i] = new T[size_col];
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = 0;
            }
        }
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = matr.m_iArr[i][j];
            }
    }
    cout << "Operator =" << endl;
    return *this;
}
 
template<class T>
void Matrix<T>::init_matrix()
{
 
    if (&m_iArr != 0)
    {
        for (int j = 0; j < size_row; j++)
        {
            delete m_iArr[j];
        }
        delete[] m_iArr;
    }
    
    cout << "enter row:";
    cin >> size_row;
    cout << "enter col:";
    cin >> size_col;
        m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    cout << "Matrix for random enter - 1nMatrix for user enter -2nPlease enter : ";
        int l = 1;
    cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                cout << "a[" << i << "]" << "[" << j << "]" << "=";
                cin >> m_iArr[i][j];
            }
        break;
    }
}
template<class T>
int Matrix<T>::count_null()
{
    int count_null = 0;
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            if (m_iArr[i][j] == 0)
            {
                count_null++;
            }
        }
        cout << count_null << endl;
    return count_null;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//matrix.h
#pragma once
#include<iostream>
using namespace std;
template<class T>
class Matrix
{
private:
    T *m_iArr;
    int size_row;
    int size_col;
public:
    
    Matrix();
    Matrix(int size_row_BuUser, int size_col_BuUser);
    Matrix( Matrix& init);
    ~Matrix();
    friend ostream& operator<<  (ostream&, Matrix<T>&);
    Matrix& operator=(Matrix<T>& rhs);
    void init_matrix();
    int count_null();
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//main.cpp
#include"matrix.cpp"
int main()
{
    Matrix<int> m;
    m.count_null();
    int row, col;
    cin >> row;
    cin >> col;
    Matrix<int> m2(row, col);
    cout << m2;
    m2.count_null();
    m2.init_matrix();
    cout << m2;
    m = m2;
    cout << m;
    Matrix<int> m3(m2);
    cout << m3;
    return 0;
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



143 / 92 / 34

Регистрация: 30.01.2018

Сообщений: 467

04.05.2019, 22:44

2

В какой строке ошибка, а то просматривать весь код очень муторно



0



0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

04.05.2019, 22:49

 [ТС]

3

в 69 строке

Добавлено через 51 секунду
в 69 строке

Добавлено через 48 секунд
в 69 строке



0



143 / 92 / 34

Регистрация: 30.01.2018

Сообщений: 467

04.05.2019, 22:52

4

Цитата
Сообщение от holdem_
Посмотреть сообщение

m_iArr = new init.T*[size_row];

Что такое init.T?
Может быть ты имел ввиду просто T?



1



0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

04.05.2019, 23:02

 [ТС]

5

Цитата
Сообщение от Pashka Durov
Посмотреть сообщение

Что такое init.T?
Может быть ты имел ввиду просто T?

Да , просто T должно быть

Добавлено через 2 минуты

Цитата
Сообщение от Pashka Durov
Посмотреть сообщение

Что такое init.T?
Может быть ты имел ввиду просто T?

Но когда делаю просто T , появляется
Ошибка C2440 =: невозможно преобразовать «T **» в «T *» 69 .



0



143 / 92 / 34

Регистрация: 30.01.2018

Сообщений: 467

04.05.2019, 23:04

6

Как у тебя сейчас 69 строка выглядит?



0



holdem_

0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

04.05.2019, 23:13

 [ТС]

7

C++
1
2
    
m_iArr = new T*[size_row];



0



Pashka Durov

143 / 92 / 34

Регистрация: 30.01.2018

Сообщений: 467

04.05.2019, 23:20

8

Попробуй так

C++
1
m_iArr = new T[size_row];

Но не гарантирую



0



holdem_

0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

05.05.2019, 11:52

 [ТС]

9

Цитата
Сообщение от Pashka Durov
Посмотреть сообщение

Попробуй так

C++
1
m_iArr = new T[size_row];

Но не гарантирую

На 69 строку перестало ругаться , но всеравно есть ошибка в 72 строке :
Ошибка C2440 =: невозможно преобразовать «T **» в «T *» 72 .

Добавлено через 1 минуту
Она так выглядет — m_iArr[i] = new T[size_col];



0



5695 / 3134 / 1306

Регистрация: 07.02.2019

Сообщений: 7,875

05.05.2019, 11:56

10

holdem_, Просто скопируй цикл из строк 25-28.
И распихивать реализацию шаблонных классов по разным файлам — не работает



0



0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

05.05.2019, 12:00

 [ТС]

11

Цитата
Сообщение от zayats80888
Посмотреть сообщение

holdem_, Просто скопируй цикл из строк 25-28.
И распихивать реализацию шаблонных классов по разным файлам — не работает

На эти строки тоже ругается .



0



zayats80888

5695 / 3134 / 1306

Регистрация: 07.02.2019

Сообщений: 7,875

05.05.2019, 12:16

12

Цитата
Сообщение от holdem_
Посмотреть сообщение

На эти строки тоже ругается

Матом?

Добавлено через 11 минут
holdem_,

C++
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
//matrix.h
#pragma once
#include<iostream>
 
template<class T>
class Matrix
{
private:
    T** m_iArr;
    int size_row;
    int size_col;
public:
 
    Matrix();
    Matrix(int size_row_BuUser, int size_col_BuUser);
    Matrix(Matrix& init);
    ~Matrix();
    friend std::ostream& operator<<  (std::ostream&, Matrix<T>&);
    Matrix& operator=(Matrix<T>& rhs);
    void init_matrix();
    int count_null();
};
 
template <class T>
Matrix<T>::Matrix()
{
    size_col = 0;
    size_row = 0;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
}
//конструктор з параметрами
template <class T>
Matrix<T>::Matrix(int size_row_BuUser, int size_col_BuUser)
{
    size_row = size_col_BuUser;
    size_col = size_row_BuUser;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    std::cout << "Matrix for random enter - 1nMatrix for user enter -2" <<
        std::endl << "Please enter:";
    int l = 1;
    std::cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                std::cout << "a[" << i << "]" << "[" << j << "]" << "=";
                std::cin >> m_iArr[i][j];
            }
        break;
    }
}
 
template<class T>
Matrix<T>::Matrix(Matrix<T>& init)
{
    if (&m_iArr != 0)
    {
        for (int j = 0; j < size_row; j++)
        {
            delete &m_iArr[j];
        }
        delete[] m_iArr;
    }
    size_row = init.size_row;
    size_col = init.size_col;
    m_iArr = new T*[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = init.m_iArr[i][j];
        }
}
 
template<class T>
Matrix<T>::~Matrix()
{
    for (int j = 0; j < size_row; j++)
    {
        delete m_iArr[j];
    }
    delete[] m_iArr;
}
 
template <class T>
std::ostream& operator<<(std::ostream& output, Matrix<T>& matr)
{
    for (int i = 0; i < matr.size_row; i++)
    {
        for (int j = 0; j < matr.size_col; j++)
        {
            output << matr.m_iArr[i][j] << " ";
        }
        output << std::endl;
    }
    output << std::endl;
    return output;
}
 
template<class T>
Matrix<T>& Matrix<T>::operator= (Matrix<T>& matr)
{
    if (this != &matr)
    {
        for (int j = 0; j < size_row; j++)
            delete m_iArr[j];
        delete[] m_iArr;
 
        size_row = matr.size_row;
        size_col = matr.size_col;
        m_iArr = new T *[size_row];
        for (int i = 0; i < size_row; i++)
        {
            m_iArr[i] = new T[size_col];
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = 0;
            }
        }
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = matr.m_iArr[i][j];
            }
    }
    std::cout << "Operator =" << std::endl;
    return *this;
}
 
template<class T>
void Matrix<T>::init_matrix()
{
 
    for (int j = 0; j < size_row; j++)
        delete m_iArr[j];
    delete[] m_iArr;
 
    std::cout << "enter row:";
    std::cin >> size_row;
    std::cout << "enter col:";
    std::cin >> size_col;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    std::cout << "Matrix for random enter - 1nMatrix for user enter -2nPlease enter : ";
    int l = 1;
    std::cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                std::cout << "a[" << i << "]" << "[" << j << "]" << "=";
                std::cin >> m_iArr[i][j];
            }
        break;
    }
}
template<class T>
int Matrix<T>::count_null()
{
    int count_null = 0;
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            if (m_iArr[i][j] == 0)
            {
                count_null++;
            }
        }
    std::cout << count_null << std::endl;
    return count_null;
}



0



holdem_

0 / 0 / 0

Регистрация: 27.10.2018

Сообщений: 21

05.05.2019, 12:57

 [ТС]

13

Цитата
Сообщение от zayats80888
Посмотреть сообщение

Матом?

Добавлено через 11 минут
holdem_,

C++
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
//matrix.h
#pragma once
#include<iostream>
 
template<class T>
class Matrix
{
private:
    T** m_iArr;
    int size_row;
    int size_col;
public:
 
    Matrix();
    Matrix(int size_row_BuUser, int size_col_BuUser);
    Matrix(Matrix& init);
    ~Matrix();
    friend std::ostream& operator<<  (std::ostream&, Matrix<T>&);
    Matrix& operator=(Matrix<T>& rhs);
    void init_matrix();
    int count_null();
};
 
template <class T>
Matrix<T>::Matrix()
{
    size_col = 0;
    size_row = 0;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
}
//конструктор з параметрами
template <class T>
Matrix<T>::Matrix(int size_row_BuUser, int size_col_BuUser)
{
    size_row = size_col_BuUser;
    size_col = size_row_BuUser;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    std::cout << "Matrix for random enter - 1nMatrix for user enter -2" <<
        std::endl << "Please enter:";
    int l = 1;
    std::cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                std::cout << "a[" << i << "]" << "[" << j << "]" << "=";
                std::cin >> m_iArr[i][j];
            }
        break;
    }
}
 
template<class T>
Matrix<T>::Matrix(Matrix<T>& init)
{
    if (&m_iArr != 0)
    {
        for (int j = 0; j < size_row; j++)
        {
            delete &m_iArr[j];
        }
        delete[] m_iArr;
    }
    size_row = init.size_row;
    size_col = init.size_col;
    m_iArr = new T*[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = init.m_iArr[i][j];
        }
}
 
template<class T>
Matrix<T>::~Matrix()
{
    for (int j = 0; j < size_row; j++)
    {
        delete m_iArr[j];
    }
    delete[] m_iArr;
}
 
template <class T>
std::ostream& operator<<(std::ostream& output, Matrix<T>& matr)
{
    for (int i = 0; i < matr.size_row; i++)
    {
        for (int j = 0; j < matr.size_col; j++)
        {
            output << matr.m_iArr[i][j] << " ";
        }
        output << std::endl;
    }
    output << std::endl;
    return output;
}
 
template<class T>
Matrix<T>& Matrix<T>::operator= (Matrix<T>& matr)
{
    if (this != &matr)
    {
        for (int j = 0; j < size_row; j++)
            delete m_iArr[j];
        delete[] m_iArr;
 
        size_row = matr.size_row;
        size_col = matr.size_col;
        m_iArr = new T *[size_row];
        for (int i = 0; i < size_row; i++)
        {
            m_iArr[i] = new T[size_col];
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = 0;
            }
        }
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = matr.m_iArr[i][j];
            }
    }
    std::cout << "Operator =" << std::endl;
    return *this;
}
 
template<class T>
void Matrix<T>::init_matrix()
{
 
    for (int j = 0; j < size_row; j++)
        delete m_iArr[j];
    delete[] m_iArr;
 
    std::cout << "enter row:";
    std::cin >> size_row;
    std::cout << "enter col:";
    std::cin >> size_col;
    m_iArr = new T *[size_row];
    for (int i = 0; i < size_row; i++)
    {
        m_iArr[i] = new T[size_col];
        for (int j = 0; j < size_col; j++)
        {
            m_iArr[i][j] = 0;
        }
    }
    std::cout << "Matrix for random enter - 1nMatrix for user enter -2nPlease enter : ";
    int l = 1;
    std::cin >> l;
    switch (l)
    {
    case 1:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                m_iArr[i][j] = rand() % 99;
            }
        break;
    case 2:
        for (int i = 0; i < size_row; i++)
            for (int j = 0; j < size_col; j++)
            {
                std::cout << "a[" << i << "]" << "[" << j << "]" << "=";
                std::cin >> m_iArr[i][j];
            }
        break;
    }
}
template<class T>
int Matrix<T>::count_null()
{
    int count_null = 0;
    for (int i = 0; i < size_row; i++)
        for (int j = 0; j < size_col; j++)
        {
            if (m_iArr[i][j] == 0)
            {
                count_null++;
            }
        }
    std::cout << count_null << std::endl;
    return count_null;
}

Все решил проблему — действительно не нужно реализовывать шаблонные классы по разным файлам . Всем спасибо за ответы



0



Понравилась статья? Поделить с друзьями:
  • Com порт не открыт как исправить
  • Com ошибка вайлант
  • Com timeout error pchud
  • Com surrogate error
  • Com storage ошибка