У меня есть проблема компиляции, которую я просто не могу объяснить в программе на С ++ на Visual Studio 2012. Ошибка появляется в нескольких местах программы, вот пример:
#ifndef __WINMUTEX_H__
# define __WINMUTEX_H__
# ifdef _WIN32
# include <windows.h>
namespace Thread
{
class WinMutex
{
public:
WinMutex();
~WinMutex();
void lock();
void unlock();
bool trylock();
private:
CRITICAL_SECTION _mutex;
};
typedef WinMutex Mutex;
}
# endif
#endif
Компилятор выдает ошибку (C2146). По сути, компилятор, похоже, не находит идентификатор CRITICAL_SECTION, равно как и Intellisense. Как я уже сказал, эта ошибка возникает в нескольких частях программы, и не только для CRITICAL_SECTION, но также для HANDLE и даже DWORD.
Я попытался заменить windows.h include на эквивалент Windows 8 (synchapi.h), но затем все равно получаю сообщение об ошибке с добавлением ошибки «Нет целевой архитектуры».
Странно то, что этот код работает, когда я использовал его в проекте на Visual Studio 2010 для Windows 7.
Кто-нибудь знает, почему это происходит?
Спасибо
Если ваш проект является проектом приложения Магазина Windows, некоторые части Win32 API недоступны, по-видимому, включая CRITICAL_SECTION и связанные с ним. Вам придется использовать эквиваленты C ++ / CX, см .: http://msdn.microsoft.com/en-us/library/windows/apps/hh771042.aspx
Других решений пока нет …