是否可以將枚舉作爲參數傳遞給可變參數函數?我試圖做到以下幾點:使用枚舉引起SIGILL信號的變量函數
GLenum ShaderManager::initialize()
{
GLuint program = loadShader("Flat", 2, ATTRIBUTE_VERTEX, "coord3d", ATTRIBUTE_TEXTURE0, "texcoord");
//...
}
GLuint ShaderManager::loadShader(std::string shaderName, ...)
{
GLuint program;
//...
va_list arglist;
va_start(arglist, shaderName);
int count = va_arg(arglist, int);
for(int i = 0; i < count; i++) {
AttributeLocation location = va_arg(arglist, AttributeLocation);
char * name = va_arg(arglist, char *);
glBindAttribLocation(program, location, name);
}
va_end(arglist);
//...
}
如果雙方ATTRIBUTE_VERTEX
和ATTRIBUTE_TExTURE
被聲明爲
enum AttributeLocation {
ATTRIBUTE_VERTEX = 0,
ATTRIBUTE_COLOR,
ATTRIBUTE_NORMAL,
ATTRIBUTE_TEXTURE0
};
但該程序只是終止。我發現,調試程序,錯誤發生在for循環後的第一行。所以我想知道是否有可能做到這一點或者它是非法的。
我不認爲這個錯誤是在這個代碼中,你必須發佈更多。 – 2012-01-31 01:35:39
@SethCarnegie實際上我認爲是這樣,因爲如果我只將'AttributeLocation location = va_arg(arglist,AttributeLocation);'改爲'int location = va_arg(arglist,int);'它按預期工作。無論如何,我會發布更多相關的代碼。 – 2012-01-31 01:39:06
謝謝。我已經找出了什麼是錯誤的,見下文。 – 2012-01-31 01:42:48