C++错误:ISO C++禁止声明.没有类型

C++ error: ISO C++ forbids declaration. with no type

本文关键字:C++ 类型 声明 禁止 错误 ISO      更新时间:2023-10-16

有人可以帮助我解决这个问题吗?
我怎样才能使这行可以编译好?

ClientManager.h:332:错误:预期的","或"..."在"*"标记之前

ClientManager.h:332:错误:ISO C++禁止声明没有类型的"TPacketGDCombatZoneResetRanking">

ClientManager.h:333:错误:预期的","或"..."在"*"标记之前

ClientManager.h:333:错误:ISO C++禁止声明没有类型的"TPacketGDCombatZoneSkillsCache">

客户经理.h 行 332 - 333

void        CombatZoneResetRanking(const TPacketGDCombatZoneResetRanking* p);
void        UpdateSkillsCache(const TPacketGDCombatZoneSkillsCache* p);

客户端管理器.cpp函数

void CClientManager::CombatZoneResetRanking(const TPacketGDCombatZoneResetRanking* p)
{
    CDBManager::instance().DirectQuery("UPDATE player.player SET combat_zone_rank = 0 WHERE combat_zone_rank > 0");
    std::auto_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery("SELECT * FROM player.combat_zone_ranking_weekly ORDER BY memberPoints DESC LIMIT 3"));   
    if (pMsg->Get()->uiNumRows == 3)
    {
        MYSQL_ROW row;
        int memberRank = 1;
        char szQuery[512 + 1];
        while ((row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
        {
            sprintf(szQuery, "UPDATE player.player SET combat_zone_rank = '%d' WHERE name = '%s'", memberRank, row[0]);
            CDBManager::instance().DirectQuery(szQuery);
            memberRank++;
        }
    }
    else {
        sys_err("The giving ranking medals not was possible because not was exist 3 players on ranking weekly.");
    }
    CDBManager::instance().DirectQuery("TRUNCATE TABLE player.combat_zone_ranking_weekly");
}
void CClientManager::UpdateSkillsCache(const TPacketGDCombatZoneSkillsCache* p)
{
    char szQuery[2048 + 1];
    sprintf(szQuery, 
        "INSERT INTO player.combat_zone_skills_cache (pid, skillLevel1, skillLevel2, skillLevel3, skillLevel4, skillLevel5, skillLevel6) "
            "VALUES('%d', '%d', '%d', '%d', '%d', '%d', '%d') "
                "ON DUPLICATE KEY UPDATE skillLevel1 = '%d', skillLevel2 = '%d', skillLevel3 = '%d', skillLevel4 = '%d', skillLevel5 = '%d', skillLevel6 = '%d'", 
                    p->dwPID, p->dwSkillLevel1, p->dwSkillLevel2, p->dwSkillLevel3, p->dwSkillLevel4, p->dwSkillLevel5, p->dwSkillLevel6, p->dwSkillLevel1, p->dwSkillLevel2, p->dwSkillLevel3, p->dwSkillLevel4, p->dwSkillLevel5, p->dwSkillLevel6);
    CDBManager::instance().DirectQuery(szQuery);
}

例:

case HEADER_GD_COMBAT_ZONE_RESET_RANKING:
    CombatZoneResetRanking((TPacketGDCombatZoneResetRanking*)data);
    break;
    
case HEADER_GD_COMBAT_ZONE_SKILLS_CACHE:
    UpdateSkillsCache((TPacketGDCombatZoneSkillsCache*)data);
    break;

n.m.的评论击中了它的头。

这里的编译器错误消息非常不幸(并表明您使用的是过时的 GCC 版本(。问题是编译器找不到你在那里使用的类型,所以它不是const some_type* name_of_parameter读取参数,而是将其读取为const name_of_parameter other_stuff_that_shouldnt_be_here,并抱怨 1( 你不能在没有先给出类型的情况下命名参数和 2( 你在参数名称后有一些意想不到的标记(即*(。

但真正的问题是没有声明类型,导致编译器走上错误的道路。

您需要使用前向声明声明类型,或者包含定义它们的标头。