Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
快板/c++;无法将参数3从';常量字符*';至';字符*'; 我是一个试图学习C++和Alelgo的NoOB,我正在跟随一个教程,我是如何想出这个代码的。我的问题是:_C++_C_String_Char_Allegro - Fatal编程技术网

快板/c++;无法将参数3从';常量字符*';至';字符*'; 我是一个试图学习C++和Alelgo的NoOB,我正在跟随一个教程,我是如何想出这个代码的。我的问题是:

快板/c++;无法将参数3从';常量字符*';至';字符*'; 我是一个试图学习C++和Alelgo的NoOB,我正在跟随一个教程,我是如何想出这个代码的。我的问题是:,c++,c,string,char,allegro,C++,C,String,Char,Allegro,textout_center_ex(屏幕,font1,Draw.c_str(),scrW/2,scrH/2,eBlue,-1) 当涉及到'Draw.c_str()'时,我得到一个错误:类型为“const char*”的参数与类型为“char*”的参数不兼容 如果我尝试构建,我会得到“错误C2664:'void textout_center_ex(位图*,字体*,字符*,int,int,int,int)”:无法将参数3从“const char*”转换为“char*” 我如何解决这个问题 // Se

textout_center_ex(屏幕,font1,Draw.c_str(),scrW/2,scrH/2,eBlue,-1)

当涉及到'Draw.c_str()'时,我得到一个错误:类型为“const char*”的参数与类型为“char*”的参数不兼容

如果我尝试构建,我会得到“错误C2664:'void textout_center_ex(位图*,字体*,字符*,int,int,int,int)”:无法将参数3从“const char*”转换为“char*”

我如何解决这个问题

// Set variables
int counter = 0;
std::string Word = "SuperAwesomeTrivia";
std::string Draw = "";

FONT *font1 = load_font("font1.pcx", NULL, NULL);

while (!closeWindow){

// Update
    Draw += Word[counter];
    counter++;

    if (counter > Word.length() - 1)
    {
        closeWindow = true;
    }

    // Draw
    textout_centre_ex(screen, font1, Draw.c_str(), scrW / 2, scrH / 2, eBlue, -1);
    if (!closeWindow)
        rest(200);
    else
        rest(2000);
    clear_bitmap(screen);
}
destroy_font(font1);
allegro_exit();

return 0;

(抬头:我的C++经验有点生疏,我可能不记得一些C++细节)

您正在证明一个函数具有不同于它所要求的数据类型。它要求一些可变的东西,而你给它一些不变的东西

我认为在实际操作中,函数仍然会收到char指针的副本(因此,如果它在内部更改指针的值,则无关紧要),但是编译器可能会抱怨

要解决此问题,可以将整个文本(char*指向一个char数组,以\0结尾,对吗?)复制到一个新的char数组,并将其提供给函数。也许有一个更新的API,它改变了签名,把参数的“const”合并到了一起。

(抬头:我的C++经验有点生疏,我可能不记得一些C++细节)

您正在证明一个函数具有不同于它所要求的数据类型。它要求一些可变的东西,而你给它一些不变的东西

我认为在实际操作中,函数仍然会收到char指针的副本(因此,如果它在内部更改指针的值,则无关紧要),但是编译器可能会抱怨


要解决此问题,可以将整个文本(char*指向一个char数组,以\0结尾,对吗?)复制到一个新的char数组,并将其提供给函数。可能有一个较新版本的API更改了签名以包含参数的“const”。

如果函数保证不改变指向的数据,则可以使用
const\u cast
将参数强制转换为
char*

textout_centre_ex(screen, font1, const_cast<char*>(Draw.c_str()), scrW / 2, scrH / 2, eBlue, -1);
                                 ^~~~~~~~~~~~~~~~~~            ~
textout_center_ex(屏幕、字体1、常量(Draw.c_str())、scrW/2、scrH/2、eBlue,-1);
^~~~~~~~~~~~~~~~~~            ~

更好的解决方案是使用GCC/Clang或
#在包含任何Allegro头之前自己定义AL_CONST
进行编译,这样就可以在它应该位于的位置获得
CONST
,并且不必在代码中乱丢丑陋的强制转换。

如果函数保证不改变指向的数据,则可以使用
const\u cast
将参数强制转换为
char*

textout_centre_ex(screen, font1, const_cast<char*>(Draw.c_str()), scrW / 2, scrH / 2, eBlue, -1);
                                 ^~~~~~~~~~~~~~~~~~            ~
textout_center_ex(屏幕、字体1、常量(Draw.c_str())、scrW/2、scrH/2、eBlue,-1);
^~~~~~~~~~~~~~~~~~            ~


更好的解决方案是使用GCC/Clang或
#在包含任何Allegro头之前自己定义AL_CONST CONST
,这样你就可以在它应该在的地方获得
CONST
,而不必在代码中乱丢难看的类型转换。

你在使用什么Allegro实现?根据,第三个参数是
const char*
,而不是
char*
。这是有意义的,因为函数不应该修改字符串。我正在使用allegro 4.4.2,我猜你的库出了问题。@Jack allegro 4.4仅在使用GCC编译时才将
AL_CONST
定义为
CONST
。(,)@tuple_cat:a
const_cast
是一个不错的选择,但是AL_-const的基本原理似乎已经过时了,因为它指的是不支持
const
的编译器,现在应该不多了。我们不知道OP编译器,但我想用
AL_CONST CONST
编译Allegro是安全的,您使用的Allegro实现是什么?根据,第三个参数是
const char*
,而不是
char*
。这是有意义的,因为函数不应该修改字符串。我正在使用allegro 4.4.2,我猜你的库出了问题。@Jack allegro 4.4仅在使用GCC编译时才将
AL_CONST
定义为
CONST
。(,)@tuple_cat:a
const_cast
是一个不错的选择,但是AL_-const的基本原理似乎已经过时了,因为它指的是不支持
const
的编译器,现在应该不多了。我们不知道OP编译器,但我想用
AL_CONST CONST
编译Allegro是安全的
char*
CONST char*
之间的区别不是指针是否不可变,而是指针指向什么。是的,函数接收指针的副本,但是通过常量指针它不能改变指向的对象,而通过非常量指针它可以。因此编译器必须抱怨。
char*
const char*
之间的区别不是指针是否不可变,而是指针指向什么。是的,函数接收指针的副本,但是通过常量指针它不能改变指向的对象,而通过非常量指针它可以。所以编译器一定会抱怨。@billybrian:你真的应该仔细看看Jack在最初的帖子中给你的线索。根据文档,函数应该采用
常量char*
,这很有意义,因为它在打印数据时不应该修改数据。我会找出你为什么不使用,并找出真正的问题,不使用难看的绷带。@user1320881 Allegro 4.4不使用
const
,除非库是用GCC编译的。见我在原帖上面的评论。我从哪里开始。。。。我应该重新安装allegro吗