windows.h文件与自定义Rect类的冲突;函数XXX不是类型名;成员的声明与其类具有相同的名称;mysql_com.h 语法错误C2059
切记:自己定义的类千万别和系统中的windows.h或者其他冲突,否则不显示具体的错误。排查较为麻烦。
在上一篇博客中介绍了如何使用C++连接到数据库C++连接MySQL数据库
但是在我使用时候发生了一个奇怪的错误,如下图所示,
1.运行前的错误
2:运行时的错误
问题分析:本来是可以正常运行的,经过排查出现了以上错误是由于include两个头文件()造成的
#include <windows.h>
#include <winsock.h>
#include <windows.h>
#include <winsock.h>
出现了以上问题,想过替换掉这两个头文件,但是实际上加入这两个头文件是由于MySQL.h头文件需要的,所以并不能替换。否则mysql.h将会报以下错误。
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <winsock.h>
#include <mysql.h>
于是寻找别的解决方法,最后看到网上说是由于windows.h文件冲突造成的,我以为是windows.h头文件和Rect有冲突需要引入全路径才可以。于是按照网上的教程
#include "c:\Program Files (x86)\Windows Kits\8.1\Include\um\Windows.h"
#include "c:\Program Files (x86)\Windows Kits\8.1\Include\um\winsock.h"
但是结果都是一样的不行。
解决方法:
最后实在没有办法,我将Rectangle替换成Rect虽然编译期没有报错但实际也没有结果。但是我发现这是由于window.h中包含Rect,所以导致的重名冲突,依据如下:
错误的定义指向:
正确的定义指向:
至此,问题就可以解决了:
1修改类名Rectangle改成了Rectangles。
2、修改方法名,near修改成nears。
3、项目内全替换以上变量。