小编smo*_*190的帖子

C++错误C2447?我错过了什么

我不知道我是否会发疯,或者只是我读过的关于这个错误的一切都不适用于我的情况.但是在编译项目时我遇到了这些错误:

1>f:\program files\testengine\testengine\testengine\game.cpp(10) : error C2061: syntax error : identifier '{ctor}'
1>f:\program files\testengine\testengine\testengine\game.cpp(11) : error C2143: syntax error : missing ';' before '{'
1>f:\program files\testengine\testengine\testengine\game.cpp(11) : error C2447: '{' : missing function header (old-style formal list?)
1>f:\program files\testengine\testengine\testengine\game.cpp(15) : error C2059: syntax error : 'public'
1>f:\program files\testengine\testengine\testengine\game.cpp(16) : error C2143: syntax error : missing ';' before '{'
1>f:\program files\testengine\testengine\testengine\game.cpp(16) : error C2447: '{' : missing function header (old-style formal list?)
Run Code Online (Sandbox Code Playgroud)

所以,我谷歌的错误,每个人都说这是由额外和/或缺少分号和括号等事情引起的.但是我已经仔细查看了我的代码(不是很多!)而且我没有看到任何这些,除非当然,正如我之前建议的那样,我会发疯...

Game.h

#ifndef _SBE_CGAME_
#define _SBE_CGAME_

class CGame
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors visual-studio

2
推荐指数
2
解决办法
2452
查看次数

std :: wstring无法使用std :: map <const wchar_t*的[]运算符,const char*>

我有一个const std::map<const wchar_t*, const char*>在全局命名空间中.它看起来像这样:

.h文件

typedef std::map<const wchar_t*, const char*> ShaderMap;

const ShaderMap::value_type rawShaderData[] = {
    ShaderMap::value_type( L"BasicShader_Vertex", 
        "..."
    ),
);

const int ElementCount = 2; //Length of rawShaderData
extern ShaderMap ShaderProgramsMap;
Run Code Online (Sandbox Code Playgroud)

.cpp文件

ShaderMap ShaderProgramsMap = ShaderMap( rawShaderData, rawShaderData + ElementCount );
Run Code Online (Sandbox Code Playgroud)

我试图在我的代码中的其他地方访问它,如下所示:

std::wstring shaderKey = std::wstring( name + L"_Vertex" );
...
pShaderData = ShaderProgramsMap[shaderKey.c_str()];
Run Code Online (Sandbox Code Playgroud)

使用调试器shaderKey是"BasicShader_vertex"但是pShaderData为NULL.与值进行比较的问题std::wstring::c_strconst wchar_t*或者是一些其他地方的代码?

c++ string std map

2
推荐指数
1
解决办法
1809
查看次数

正确测量像素中的字符

我正在编写一个从头开始的文本框,以便优化语法高亮.但是,我需要以像素为单位获得字符的宽度,而不是像Graphics :: MeasureString给我的垃圾.我在网上发现了很多东西,特别是这个,然而,它似乎都没有用,或者没有考虑到标签.我需要以最快的方式来测量字符的精确尺寸(以像素为单位)和制表符空间.我似乎无法想出这一个......

应该提到我正在使用C++,CLR/CLI和GDI +


这是我的测量功能.在另一个函数中,它返回的RectangleF被绘制到屏幕:

RectangleF TextEditor::MeasureStringWidth(String^ ch, Graphics^ g, int xDistance, int lineYval)
{
    RectangleF measured;
    Font^ currentFont = gcnew Font(m_font, (float)m_fontSize);
    StringFormat^ stringFormat = gcnew StringFormat;
    RectangleF layout = RectangleF(xDistance,lineYval,35,m_fontHeightPix);
    array<CharacterRange>^ charRanges = {CharacterRange(0,1)};
    array<Region^>^ strRegions;

    stringFormat->FormatFlags = StringFormatFlags::DirectionVertical;
    stringFormat->SetMeasurableCharacterRanges(charRanges);

    strRegions = g->MeasureCharacterRanges(ch, currentFont, layout, stringFormat);

    if(strRegions->Length >= 1)
        measured = strRegions[0]->GetBounds(g);
    else
        measured = RectangleF(0,0,0,0);

    return measured;
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白MeasureCharacterRanges layoutRect参数的作用.我修改了Microsofts示例中的代码,仅使用或仅测量一个字符.

c++ clr gdi+ command-line-interface

1
推荐指数
1
解决办法
1953
查看次数

令人困惑的"std :: out_of_range"错误

我在过去的2个小时里一直在调试这个错误,并且知道如果我在睡觉前没有求助,我将无法入睡.我正在为我的游戏编写一个模型加载器,而且就目前而言,我正在使用一种非常脆弱的方法来分割字符串.但是,它在几乎相同的线上工作,然后随机不工作.我正在使用string.substr(),我相信错误意味着它试图从字符串中不存在的位置开始.调用堆栈说它发生在这一行:

v1 = v1.substr(s.find(",")+1);
Run Code Online (Sandbox Code Playgroud)

并且通过使用打印消息的断点,它说

顶点1使用"1,1",整个字符串是"173,1,1 175,1,1 174,1,1"

其中Vertex 1是v1的值,string是s的值.

这是整个功能:

FaceData data;
s = s.substr(5); //remove "FACE "
string v1, v2, v3;

//vertex 1
v1 = s.substr(0, s.find(" "));

data.vertexIndexes[0] = atoi(v1.substr(0, s.find(",")).c_str());
v1 = v1.substr(s.find(",")+1);
data.textureIndexes[0] = atoi(v1.substr(0, s.find(",")).c_str());
v1 = v1.substr(s.find(",")+1);
data.normalIndexes[0] = atoi(v1.c_str());

//vertex 2
s = s.substr(s.find(" ")+1);
v2 = s.substr(0, s.find(" "));

data.vertexIndexes[1] = atoi(v2.substr(0, s.find(",")).c_str());
v2 = v2.substr(s.find(",")+1);
data.textureIndexes[1] = atoi(v2.substr(0, s.find(",")).c_str());
v2 = v2.substr(s.find(",")+1);
data.normalIndexes[1] = atoi(v2.c_str());

//vertex 3
s = s.substr(s.find(" …
Run Code Online (Sandbox Code Playgroud)

c++ stdstring

-1
推荐指数
1
解决办法
252
查看次数