我有一个问题与visual studio的intellisense,它标志着我,我不能推到一个向量的结构,我做了存储某些数据的一个小OpenGL项目,我试图通过新的结构的数据,我想添加到向量,但它使一个错误,但我不知道为什么,当我创建的结构和存储在一个变量,然后推变量到向量,它不标记错误,所以我不知道有什么问题,当我传递一个int型变量时,它会标记错误,但当我传递一个原始数字时,直接在结构体的构造函数中就可以了。
struct VertexBufferElement
{
unsigned int type;
unsigned int count;
bool normalize;
};
void funtion(int count)
{
//the vector of the struct above
std::vector<VertexBufferElement> elements;
//This is not allowed
elements.push_back({GL_FLOAT,count,false });
//This is allowed
elements.push_back({GL_FLOAT,4,false});
//This is allowed
struct VertexBufferElement vb = { GL_FLOAT,count,false };
elements.push_back(vb);
}
2条答案
按热度按时间rxztt3cl1#
就像你说的:
//这是允许的
int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int] int [int]
因此,您应该能够用途:
而不会触发过载解决方案上的错误智能感知错误。
它还在适当的位置构造元素(如您发布的“允许”示例),所以它更整洁-我在这里避免说性能更好,因为区别应该是微不足道的
f87krz0w2#
这是因为
count
的类型是int
,所以将其转换为unsigned int VertexBuffer::count
是一个收缩转换,这在花括号初始化器中是不允许的。它允许像
4
这样的常量表达式,因为它可以转换为unsigned int
而不需要缩小(它肯定会在范围内,即不是负数)。你需要设置参数
unsinged int
:添加造型:
或者使用带括号的初始化器(在C++20/23模式下):
(By
struct VertexBufferElement vb = { GL_FLOAT,count,false };
的方式也是“不允许的”,因为收缩,但许多编译器允许它,只是作为一个扩展警告)