C++ C++;C2466错误
为什么我们可以这样做C++ C++;C2466错误,c++,visual-studio,visual-studio-2008,char,C++,Visual Studio,Visual Studio 2008,Char,为什么我们可以这样做 for(int i = 0; i < destination->imageSize; i=i+3) { buffer[2] = destination->imageData[i]; buffer[1] = destination->imageData[i+1]; buffer[0] = destination->imageData[i+2
for(int i = 0; i < destination->imageSize; i=i+3)
{
buffer[2] = destination->imageData[i];
buffer[1] = destination->imageData[i+1];
buffer[0] = destination->imageData[i+2];
buffer+=3;
}
那么如何处理这样的事情呢
对不起,我对C++ +…
顺便说一句:我的重点是创建一个函数,返回一个带有图像的字符。如果使用mem copy,如何删除返回值
我不得不问,为什么你认为他们有关联?如果您不能通过运行时变量对数组进行索引,那么即使存在数组,也毫无用处。声明由运行时变量控制的大小的变量是完全不同的,需要对编译器管理自动内存的方式进行根本性的更改 <>这就是为什么你不能在C++中做这件事的原因。这可能会改变,但现在你不能
如果您真的需要一个大小可变的数组,则需要动态分配一个数组。你可以用一种艰难的方法(
char*buff=new char[size]…delete[]buff;
),也可以用一种简单、安全的方法(std::vector buff(size)
)。你的选择。但是,您不能“在堆栈上”构建它。char buffer[destination->imageSize]代码>在编译时声明变量。当时,destination->imageSize
的值还不知道,这就是它不起作用的原因
表达式buffer[2]=destination->imageData[i]代码>(或者更确切地说,其缓冲区[2]在运行时进行计算。Hmm。您是否尝试创建指向destination->imageSize的指针或引用,并将其传递给索引?使用std::vector,您可以实现所需的功能。您的函数可以定义如下:
void readImage(std::vector<char>& imageData, std::string& filename)
{
size_t imageSize = 0;
//read file and load imageSize
imageData.resize(imageSize);
// load image into imageData using such as you in your question
for(int i = 0; i < destination->imageSize; i=i+3)
{
buffer[2] = destination->imageData[i];
buffer[1] = destination->imageData[i+1];
buffer[0] = destination->imageData[i+2];
buffer+=3;
}
}
使用vector
替代?问题是什么?为什么不能分配在运行时确定大小的数组?如何?您在手动内存管理方面有问题吗?哪些问题?还有别的吗?。。。但是const int iom=目的地->图像大小;字符缓冲区[iom];仍然是C2466@Kabumbus是的,因为正如Noah Roberts指出的那样,iom的值依赖于运行时右值。“但是,你不能在堆栈上构建它。”--你可以,但是alloca()不是一个标准函数,尽管它几乎存在于所有平台上。
void readImage(std::vector<char>& imageData, std::string& filename)
{
size_t imageSize = 0;
//read file and load imageSize
imageData.resize(imageSize);
// load image into imageData using such as you in your question
for(int i = 0; i < destination->imageSize; i=i+3)
{
buffer[2] = destination->imageData[i];
buffer[1] = destination->imageData[i+1];
buffer[0] = destination->imageData[i+2];
buffer+=3;
}
}
const int imageSize = 4242;
char imageData[imageSize]; // No C2466 error