在C++中包含mysql.h头文件,编译时却找不到my_socket类型,是咋回事啊
在C++中包含mysql.h头文件,编译时却找不到my_socket类型,是怎么回事啊?
已经在项目属性中加入了头文件和DLL文件的路径。
原代码如下,请各位高手不吝赐教
dbCon.h:
#ifndef _MYSQLLIB_DBCON_H_
#define _MYSQLLIB_DBCON_H_
#include "mysql.h"
#include <iostream>
using namespace std;
class DbCon
{
private:
MYSQL * m_mysql;
MYSQL_RES * m_res;
bool m_isQuery; //记录是否是查询操作
public:
DbCon();
~DbCon();
bool Connect(MYSQL * mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port = 0);
bool Execute(const char * strSql, unsigned long lLen);
MYSQL_RES * GetRes();
};
#endif // _MYSQLLIB_DBCON_H_
dbCon.cpp
#include "dbCon.h"
DbCon::DbCon()
{
mysql_init(m_mysql);
m_res = NULL;
m_isQuery = false;
}
DbCon::~DbCon()
{
mysql_close(m_mysql);
}
bool DbCon::Connect(MYSQL * mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port = 0)
{
if(!mysql_real_connect(mysql, host, user, passwd, db, port, NULL, 0))
{
return false;
}
return true;
}
bool DbCon::Execute(const char * strSql, unsigned long lLen)
{
char stFirstWord[10] = {0};
const char * pTemp = strSql;
while(*pTemp++ == ' ');
int i = 0;
while(*pTemp != ' ')
{
stFirstWord[i] = *pTemp;
pTemp++;
}
if(strcmp("select", stFirstWord))
m_isQuery = true;
else
m_isQuery = false;
if(0 != mysql_real_query(m_mysql, strSql, lLen))
{
return false;
}
return true;
}
MYSQL_RES * DbCon::GetRes()
{
if(m_isQuery == false)
{
return NULL;
}
return m_res;
}
test.cpp
#include <iostream>
#include "dbCon.h"
using namespace std;
int main()
{
return 0;
};
报如下错误:
1>dbCon.cpp
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C2146: 语法错误 : 缺少“;”(在标识符“fd”的前面)
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\db\mysqllib\mysql\include\mysql_com.h(427) : error C2065: “SOCKET”: 未声明的标识符
1>e:\db\mysqllib\mysql\include\mysql_com.h(427) : error C2146: 语法错误 : 缺少“)”(在标识符“s”的前面)
1>e:\db\mysqllib\mysql\include\mysql_com.h(428) : error C2059: 语法错误 : “)”
1>e:\db\mysqllib\dbcon.cpp(16) : error C2572: “DbCon::Connect”: 重定义默认参数 : 参数 6
1> e:\db\mysqllib\dbcon.h(18) : 参见“DbCon::Connect”的声明
fd在mysql_com.h中的定义是: my_socket fd;
请各位帮忙看看了,急等答案啊
------解决方案--------------------
哦 这个是因为找不到socket的定义 很好解决的 你在#include<mysql.h>前加上#include<winsock2.h>就可以了
已经在项目属性中加入了头文件和DLL文件的路径。
原代码如下,请各位高手不吝赐教
dbCon.h:
#ifndef _MYSQLLIB_DBCON_H_
#define _MYSQLLIB_DBCON_H_
#include "mysql.h"
#include <iostream>
using namespace std;
class DbCon
{
private:
MYSQL * m_mysql;
MYSQL_RES * m_res;
bool m_isQuery; //记录是否是查询操作
public:
DbCon();
~DbCon();
bool Connect(MYSQL * mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port = 0);
bool Execute(const char * strSql, unsigned long lLen);
MYSQL_RES * GetRes();
};
#endif // _MYSQLLIB_DBCON_H_
dbCon.cpp
#include "dbCon.h"
DbCon::DbCon()
{
mysql_init(m_mysql);
m_res = NULL;
m_isQuery = false;
}
DbCon::~DbCon()
{
mysql_close(m_mysql);
}
bool DbCon::Connect(MYSQL * mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port = 0)
{
if(!mysql_real_connect(mysql, host, user, passwd, db, port, NULL, 0))
{
return false;
}
return true;
}
bool DbCon::Execute(const char * strSql, unsigned long lLen)
{
char stFirstWord[10] = {0};
const char * pTemp = strSql;
while(*pTemp++ == ' ');
int i = 0;
while(*pTemp != ' ')
{
stFirstWord[i] = *pTemp;
pTemp++;
}
if(strcmp("select", stFirstWord))
m_isQuery = true;
else
m_isQuery = false;
if(0 != mysql_real_query(m_mysql, strSql, lLen))
{
return false;
}
return true;
}
MYSQL_RES * DbCon::GetRes()
{
if(m_isQuery == false)
{
return NULL;
}
return m_res;
}
test.cpp
#include <iostream>
#include "dbCon.h"
using namespace std;
int main()
{
return 0;
};
报如下错误:
1>dbCon.cpp
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C2146: 语法错误 : 缺少“;”(在标识符“fd”的前面)
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\db\mysqllib\mysql\include\mysql_com.h(243) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\db\mysqllib\mysql\include\mysql_com.h(427) : error C2065: “SOCKET”: 未声明的标识符
1>e:\db\mysqllib\mysql\include\mysql_com.h(427) : error C2146: 语法错误 : 缺少“)”(在标识符“s”的前面)
1>e:\db\mysqllib\mysql\include\mysql_com.h(428) : error C2059: 语法错误 : “)”
1>e:\db\mysqllib\dbcon.cpp(16) : error C2572: “DbCon::Connect”: 重定义默认参数 : 参数 6
1> e:\db\mysqllib\dbcon.h(18) : 参见“DbCon::Connect”的声明
fd在mysql_com.h中的定义是: my_socket fd;
请各位帮忙看看了,急等答案啊
------解决方案--------------------
哦 这个是因为找不到socket的定义 很好解决的 你在#include<mysql.h>前加上#include<winsock2.h>就可以了