При получении ошибки я освобождаю заголовки, когда я включаю их в свой проект VS 2017 c ++
в tds.h, когда я включаю их в свой проект
include\tds.h(1331): error C3646: 's': unknown override specifier
include\tds.h(1331): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
include\tds.h(1641): error C2065: 'TDS_SYS_SOCKET': undeclared identifier
include\tds.h(1641): error C2146: syntax error: missing ')' before identifier 's'
Я пытаюсь использовать freetdsВерсия 0.91.100 в моем приложении c ++, которое было построено с использованием VS 2010. Тогда все было хорошо.
Теперь, после переноса моего проекта C ++ в VS 2017, я получаю странные ошибки.Я также построил lib freetds в VS 2017.
freetds имеет это объявление в tds_sysdep_private.h
#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32)
typedef int TDS_SYS_SOCKET;
#define INVALID_SOCKET -1
#define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
#else
typedef SOCKET TDS_SYS_SOCKET;
#define TDS_IS_SOCKET_INVALID(s) ((s) == INVALID_SOCKET)
#endif
, а tds.h имеет
struct tds_socket
{
TDS_SYS_SOCKET s; /**< tcp socket, INVALID_SOCKET if not connected */
}
Иошибка в этом объявлении TDS_SYS_SOCKET
Мой код включает этот заголовок следующим образом.
tdsloader.h
using namespace std;
#if defined (__cplusplus)
extern "C" {
#endif
#include "tds.h"
#if defined (__cplusplus)
}
#endif
Согласно объявлению TDS_SYS_SOCKET в tds_sysdep_private.h,в случае сборки Windows это определяется как SOCKET, который относится к winsock2.h
. Я читал в других потоках, что порядок включения заголовочного файла важен, и я убедился, что winsock2.h включен перед windows.h.или любой другой заголовочный файл Windows.
Теперь, когда SOCKET из winsock2.h является typedef UINT_PTR SOCKET;
, что в неподписанном виде, почему VS 2017 не может распознать тип?
Сборка должна проходить гладко, как это было в VS 2010.
Теперь с VS 2017 он показывает ошибки сборки.