簡體   English   中英

C ++錯誤:ISO C ++禁止聲明。 沒有類型

[英]C++ error: ISO C++ forbids declaration. with no type

有人可以幫我解決這個問題嗎?
我如何使這些行能夠編譯良好?

ClientManager.h:332:錯誤:在'*'標記之前應為','或'...'

ClientManager.h:332:錯誤:ISO C ++禁止無類型的'TPacketGDCombatZoneResetRanking'聲明

ClientManager.h:333:錯誤:在'*'標記之前應為','或'...'

ClientManager.h:333:錯誤:ISO C ++禁止聲明無類型的'TPacketGDCombatZoneSkillsCache'

ClientManager.h332-333

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

ClientManager.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;

nm的評論引起了人們的關注。

這里的編譯器錯誤消息是非常不幸的(建議您使用的是GCC的過時版本)。 問題在於,編譯器無法在其中找到您正在使用的類型,因此const some_type* name_of_parameter將參數讀取為const some_type* name_of_parameter ,不如將其讀取為const name_of_parameter other_stuff_that_shouldnt_be_here ,並抱怨說:1)您不能在沒有第一個參數的情況下命名參數給出一個類型和2)您在參數名稱后有一些意外的標記(即* )。

但是真正的問題是沒有聲明類型,導致編譯器走錯了路。

您需要使用前向聲明來聲明類型,或者包括定義它們的標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM