我不知道我是否会发疯,或者只是我读过的关于这个错误的一切都不适用于我的情况.但是在编译项目时我遇到了这些错误:
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) 我有一个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_str来const wchar_t*或者是一些其他地方的代码?
我正在编写一个从头开始的文本框,以便优化语法高亮.但是,我需要以像素为单位获得字符的宽度,而不是像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示例中的代码,仅使用或仅测量一个字符.
我在过去的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)