为什么在 Visual Studio 2012 中编译我的C++代码时出现错误 C2228

Why do I get error C2228 when compiling my C++ code in Visual Studio 2012?

本文关键字:代码 C2228 错误 C++ 我的 Visual Studio 2012 编译 为什么      更新时间:2023-10-16

我在尝试编译此代码时遇到几个错误:

vector<char> vsData(istreambuf_iterator<char>(vsfile), istreambuf_iterator<char>());
renderer.getDevice()-> CreateVertexShader(vsData.data(), vsData.size(), nullptr, &m_vertexShader);

错误代码为 C2228。".data"/".size"的左侧必须具有类类型。

你的第一行代码是不明确的:显然,你想定义一个vector char称为vsData。但是,由于 C++ 中的语法歧义解析,称为最烦人的解析(如 @n.m 的评论中所述),您的第一行被解释为名为 vsData 的函数的函数声明,该函数接受两个参数并返回char vector

正如我在上面链接的文章中所解释的,强制编译器将第一行视为变量定义的一种方法是添加一对额外的括号:

vector<char> vsData((istreambuf_iterator<char>(vsfile)), istreambuf_iterator<char>());
                    ^                                 ^