c++ - 由于添加了 1 个 header 而导致大量错误

标签 c++ mysql visual-studio-2008 wxwidgets

我开发了一个应用程序(在 Visual Studio 2008 中),它与 MySQL 数据库通信并大量使用 wxWidgets。 问题是当我添加包含文件时,在存在 MySQL 包含文件的地方我遇到了大量错误。

这是主文件,我在其中包含 Database.h。

#include <boost/shared_ptr.hpp>
#include <wx/app.h>

#include <ConcreteBatchDialogView.h>
#include <ConcreteLoginDialogView.h>
#include <ConcreteInitDialogView.h>
#include <ConcreteKeyDataView.h>
#include <ConcreteProductDataView.h>
#include <ConcreteView.h>
#include <Controller.h>
#include <DummyModel.h>
#include <Revision.h>

#include <Database.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
     ...
     return 0;
}

Database.h 的代码如下:

#include <wx/string.h>
#include "DbTable.h"

class DbTable;

class Database
{
public:
    Database();
    ~Database();

    ....
}

最后 DbTable 包含了 MySQL:

#include <my_global.h>
#include <mysql.h>

class DbTable
{
public:
     // CREATORS
     ~DbTable();

     MYSQL_ROW currentRow;    
     MYSQL_ROW *row;
}

因此,应用程序编译正常,直到我包含 Database.h。

请检查日志:

Compiling...
main.cpp
f:\build\mysql\5_6_12\x32\include\my_config.h(263) : warning C4005: 'HAVE_STRNLEN' : macro redefinition
f:\build\wxwidgets\2_9_1\include\wx\wxcrtbase.h(252) : see previous definition of 'HAVE_STRNLEN'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : see previous definition of 'AF_IPX'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: 'AF_MAX' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : see previous definition of 'AF_MAX'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: 'SO_DONTLINGER' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : see previous definition of 'SO_DONTLINGER'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: 'sockaddr' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : see declaration of 'sockaddr'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing '}' before 'constant'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing ';' before 'constant'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: syntax error : 'constant'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: syntax error : missing ';' before '}'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: 'IN_CLASSA' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : see previous definition of 'IN_CLASSA'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: 'IN_CLASSB' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : see previous definition of 'IN_CLASSB'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(530) : warning C4005: 'IN_CLASSC' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(299) : see previous definition of 'IN_CLASSC'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(541) : warning C4005: 'INADDR_ANY' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(304) : see previous definition of 'INADDR_ANY'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(543) : warning C4005: 'INADDR_BROADCAST' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(306) : see previous definition of 'INADDR_BROADCAST'
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(577) : error C2011: 'sockaddr_in' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(312) : see declaration of 'sockaddr_in'
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: 'fd_set' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : see declaration of 'fd_set'
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(167) : warning C4005: 'FD_SET' : macro redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(102) : see previous definition of 'FD_SET'
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(176) : error C2011: 'timeval' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(111) : see declaration of 'timeval'
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(232) : error C2011: 'hostent' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(167) : see declaration of 'hostent'

我认为这已经足够了,但还有更多。

你有什么建议吗?

我检查了这可能是 wxWidgets - MySQL 编译的问题。我试图以某种方式将它们分开,但到目前为止没有帮助。

最佳答案

类定义末尾缺少分号。

与您的当前问题无关,但您应该阅读 include guards .

如果仅仅因为包含头文件而出现大量错误,则应首先检查这两件事。

关于c++ - 由于添加了 1 个 header 而导致大量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559035/

相关文章:

c++ - 为什么 [expr.ref]p(6.3.2) 中的句子 "The expression can be used only as the left-hand operand of a member function call"?

c++ - Microsoft Visual Studio 2008 C++ 错误 LNK2001,Windows Vista 64 位

c++ - C++ 字符串 == 和 compare() 的区别?

php - 如何通过在我的服务器上离线进行计算来获得距离矩阵

php - 使用 JSON 和 PHP 更新数据库 (Android)

php - 使用 PHP 和 JQuery 执行作为字段值存储在数据库表中的查询/存储过程?

php - SQL : Match IN operator with anything

c++ - 我可以将特定警告视为错误吗?

c# - 如何为 VS 2008 中的 C# 解决方案创建一个独立的可执行文件,在一个构建中包含多个项目和多个表单?

c++ - 如何访问 integer_sequence 的第 n 个值?