C++ 错误 C4700:使用了未初始化的局部变量“i”

Posted

技术标签:

【中文标题】C++ 错误 C4700:使用了未初始化的局部变量“i”【英文标题】:C++ error C4700: uninitialized local variable 'i' used 【发布时间】:2015-04-26 22:32:55 【问题描述】:
1>------ Build started: Project: RageBotGamingEngine, Configuration: Debug Win32 ------
1>  Sprite.cpp
1>c:\users\nha\documents\visual studio 2013\projects\ragebotgamingengine\ragebotgamingengine\sprite.cpp(51): error C4700: uninitialized local variable 'i' used
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

以上是输出日志的内容。 以下是可能涉及此问题的一些相关文件:

Sprite.cpp

#include "Sprite.h"
#include "Vertex.h"

#include <cstddef>

Sprite::Sprite()

_vboID = 0;



Sprite::~Sprite()

if (_vboID != 0) 
    glDeleteBuffers(1, &_vboID);



void Sprite::init(float x, float y, float width, float height) 
_x = x;
_y = y;
_width = width;
_height = height;

if (_vboID == 0) 
    glGenBuffers(1, &_vboID);


Vertex vertexData[6];

//First Triangle
vertexData[0].position.x = x + width;
vertexData[0].position.y = y + width;

vertexData[1].position.x = x;
vertexData[1].position.y = y + height;

vertexData[2].position.x = x;
vertexData[2].position.y = y;

//Second Triangle
vertexData[3].position.x = x;
vertexData[3].position.y = y;

vertexData[4].position.x = x + width;
vertexData[4].position.y = y;

vertexData[5].position.x = x + width;
vertexData[5].position.y = y + height;

for (int i; i < 6; i++) 
    vertexData[i].color.r = 255;
    vertexData[i].color.g = 0;
    vertexData[i].color.b = 255;
    vertexData[i].color.a = 255;


glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, 0);


void Sprite::draw() 
glBindBuffer(GL_ARRAY_BUFFER, _vboID);

glEnableVertexAttribArray(0);

//This is position attribute pointer
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));
//This is color attribute pointer
glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), (void*)offsetof(Vertex, color));

glDrawArrays(GL_TRIANGLES, 0, 6);

glDisableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);

我试图找出问题所在,但我对 OpenGL、SDL 和 C++ 还比较陌生&正如你想象的那样,这是一个巨大的麻烦,因为 OpenGL wiki 不太容易理解&持续的。几乎任何帮助都是非常需要和感激的。

我正在尝试创建一个游戏引擎(显然我技术不高,而且没有时间开发这个项目)

【问题讨论】:

你有两个名为color的成员... @chris 你能详细说明一下吗?我对 C++ 还很陌生 @nhabbott 你的struct Vertex 包含三个成员变量。而你正试图命名其中两个color 你知道“未初始化”是什么意思吗? 不,你的数组从 0 开始并包含 6 个值,第一个索引是 vertexData[0]Vertex vertexData[5]; for( int i = 0; i &lt; 6; i++) 将从 0 ti 5 开始迭代 【参考方案1】:
for (int i; i < 6; i++)

应该是

for (int i=0; i < 6; i++)

您声明了变量“i”但忘记初始化变量,因此它可以具有任意值,不一定是“0”

【讨论】:

谢谢,我不知道为什么我总是想念这些东西。 +1

以上是关于C++ 错误 C4700:使用了未初始化的局部变量“i”的主要内容,如果未能解决你的问题,请参考以下文章

c语言 提示 使用了未初始化的局部变量

错误:“使用未初始化的局部变量 'name'”在 C++ 中使用 char *

c++没有合适的默认构造函数可用

C语言中使用变量为啥必须要初始化?

scala变量能初始化为null吗

JAVA中变量初始化之后, 为啥还要做判空处理?