Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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/4/string/5.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++ 基本字符串::_S_构造null无效-can';我不明白为什么?_C++_String_Null - Fatal编程技术网

C++ 基本字符串::_S_构造null无效-can';我不明白为什么?

C++ 基本字符串::_S_构造null无效-can';我不明白为什么?,c++,string,null,C++,String,Null,我正在转换一些代码,以便停止使用char*,而使用std::string来避免内存泄漏和/或缓冲区过载 但是我得到了一个函数,在这里我得到了上面的错误。我真的没怎么变: GuiText::GuiText(std::string t, int s, XeColor c) { origText = NULL; text = NULL; size = s; color = c; alpha = c.a; style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE;

我正在转换一些代码,以便停止使用char*,而使用std::string来避免内存泄漏和/或缓冲区过载

但是我得到了一个函数,在这里我得到了上面的错误。我真的没怎么变:

GuiText::GuiText(std::string t, int s, XeColor c) {
origText = NULL;
text = NULL;
size = s;
color = c;
alpha = c.a;
style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE;
maxWidth = 0;
wrap = false;
textDynNum = 0;
textScroll = SCROLL_NONE;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
textScrollDelay = TEXT_SCROLL_DELAY;

alignmentHor = ALIGN_CENTRE;
alignmentVert = ALIGN_MIDDLE;

if (!t.empty()) {
    origText = strdup(t.c_str());
    text = charToWideChar(gettext(t.c_str()));
}

for (int i = 0; i < 20; i++)
    textDyn[i] = NULL;
}
GuiText::GuiText(std::string t,int s,xec){
origText=NULL;
text=NULL;
尺寸=s;
颜色=c;
α=c.a;
样式=FTGX_对齐_中心| FTGX_对齐_中间;
最大宽度=0;
wrap=false;
textDynNum=0;
textcroll=滚动\无;
textScrollPos=0;
textScrollInitialDelay=文本滚动初始延迟;
TEXT滚动延迟=TEXT\u滚动延迟;
对准HOR=对准中心;
alignmentVert=对齐\中间;
如果(!t.empty()){
origText=strdup(t.c_str());
text=charToWideChar(gettext(t.c_str());
}
对于(int i=0;i<20;i++)
textDyn[i]=NULL;
}
所有代码都在这里

所有这些都是daisy,因为我有很多GuitText实例,但是当我在第59行和gui.h中使用const char*对函数进行注释以使我的代码使用正确的函数时,我得到了上面的错误。。我不明白为什么

如何使用它的示例:

有什么想法吗?我已经转换了所有gui_text.cpp,但还是有相同的错误,所以最好尝试找出问题所在并从那里着手


希望你能帮助一个新手;-)

我假设以下两行正在尝试初始化字符串:

origText = NULL;
text = NULL;
应该1)在初始值设定项列表中初始化,2)如果为空,则不需要,3)无效(不能将字符串初始化为
NULL


不能用空指针初始化
std::string
。所以我必须设置t?但是当我使用函数时,我不是这样做吗?或者我应该添加if(t.empty()){t=”“;}?您不能将空指针传递到函数中。函数内部已经太晚了。所以在使用函数之前,我必须检查它是否为null?在某些地方,您正在执行类似于
吉他文本(null,…)的操作。这用于调用
GuiText(const char*,…)
重载,检查指针是否为空。但是现在您已经删除了这个重载,同样的代码调用了
GuiText(string(NULL),…)
。失败的部分是
string(NULL)
部分:执行根本不会进入
GuiText
构造函数,因此在构造函数中所做的任何事情都不会有帮助。您必须首先修复调用代码,使其不通过
NULL
。您的调试器应该能够轻松找到有问题的代码。origText是const char,而文本是wchar_t(来自gui.h)。
const char
const char*
?在任何一种情况下,这都会在以后向您介绍另一个bug。如果您使用
NULL
而不是
调用构造函数,您也会遇到该错误。@siz我猜您的意思是分别使用
const char*
wchar\u t*
,否则不应将它们设置为
NULL
(对于指针,您应该使用
nullptr
)是的,我做了:)使用*而不使用最小标记显然会使文本倾斜D
GuiText::GuiText(std::string t, int s, XeColor c) :
    origText(t),
    size(s),
    color(c),
    alpha(c.a),
    style(FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE),
    // etc
{
    // etc
}