簡體   English   中英

需要幫助來調試從const char *到char *的無效轉換[-fpermissive]

[英]need help debugging invalid conversion from const char* to char* [-fpermissive]

我是C ++的新手,不知道為什么會這樣。

第105行,我得到從const char *到char * [-fpermissive]的錯誤無效轉換第113行,我得到了從âconstchar *到char * [-fpermissive]的錯誤無效轉換

#include <cstdio>
#include <cstdarg>
#include <string>

using namespace std;

char acWordWrap[1024];
char acPrint[1024];

BasicConsole::BasicConsole(char* szName)
: ZFSubSystem(szName)
{
    m_iMaxWidth = 50;   //TEXT_MAX_LENGHT;
    m_bLog      = false;
}


BasicConsole::~BasicConsole()
{
    for(unsigned int i =0;i<m_kText.size();i++)
    {
        delete[] m_kText[i];    
    }

    m_kText.clear();
}


/** \brief  Prints a single row to console.
        \ingroup Basic
*/
void BasicConsole::PrintOneRow(const char* aText)
{
    ZFAssert(aText, "NULL Pointer argument");

    delete[] m_kText[m_kText.size()-1];

    for(int i=m_kText.size()-1;i>0;i--)
    {
        if(m_kText[i-1]!=NULL)
        {
            m_kText[i]=m_kText[i-1];            
        }
    }

    m_kText[0]=new char[m_iMaxWidth+2];

    strcpy(m_kText[0],aText);
}


/** \brief  Prints a row and word wraps so it don't go beoynd edge of console.
        \ingroup Basic
*/
void BasicConsole::PrintWordWrap(const char* aText)
{
    ZFAssert(aText, "NULL Pointer argument");

    string strEndLined = string(aText) + "\n";
    if(m_bLog)
        GetSystem().Log("console", strEndLined.c_str());

    int iNumOfChars = strlen( aText );

    while(iNumOfChars > m_iMaxWidth)
    {
        const char* szSpace = &aText[m_iMaxWidth];
        int iWidht  = m_iMaxWidth;

        while(szSpace > aText && szSpace[0] != ' ') szSpace--;
        if(szSpace == aText)
        {
            szSpace =  &aText[m_iMaxWidth];
        }
        else
        {
            iWidht  = szSpace - aText;
        }

        strncpy(acWordWrap, aText, iWidht);
        acWordWrap[iWidht] = 0;
        PrintOneRow(acWordWrap);
        aText += iWidht;
        iNumOfChars -= iWidht;
    }

    if(aText[0])
        PrintOneRow(aText);
}


/** \brief  Prints one row and handles splitting it up at line breaks.
        \ingroup Basic
*/
void BasicConsole::Print(const char* aText) 
{
    ZFAssert(aText, "NULL Pointer argument");

    const char* pszText = aText;

    char* pszCr = strchr(pszText, 10);
    while(pszCr)
    {
        strncpy(acPrint,pszText, pszCr - pszText);
        acPrint[pszCr - pszText] = 0;
      PrintWordWrap(acPrint);
        //cout << " - '" << acPrint << "'"<< endl;
        pszText = pszCr + 1;
        pszCr = strchr(pszText, 10);
    }

    if(pszText[0])
    {
        //cout << "- '" << pszText << "'"<< endl;
      PrintWordWrap(pszText);
    }
}


/** \brief  The function used to print to the console.
        \ingroup Basic
*/
void BasicConsole::Printf(const char *fmt, ...)
{
    ZFAssert(fmt, "NULL Pointer argument");

    // Make sure we got something to work with. 
    if (fmt == NULL)            
        return;                         

    va_list     ap;                         // Pointer To List Of Arguments

    va_start(ap, fmt);                      // Parses The String For Variables
        vsprintf(g_szFormatText, fmt, ap);      // And Convert Symbols
    va_end(ap);                             // 

    // Now call our print function.
    Print(g_szFormatText);
}

bool BasicConsole::StartUp()        { return true;  }
bool BasicConsole::ShutDown()       { return true;  }
bool BasicConsole::IsValid()        {   return true;    };      
void BasicConsole::RunCommand(int cmdid, const ConCommandLine* kCommand) { }        

這行似乎是您的問題:

char* pszCr = strchr(pszText, 10);

由於pszTextconst char * ,因此需要在其開頭添加一個const 你是一個“承諾”保持的常量性pszText您正在使用的版本打破strchr這需要返回char *

暫無
暫無

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

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