gpt4 book ai didi

c++ - 错误 C2228 : left of '.words' must have class/struct/union

转载 作者:行者123 更新时间:2023-11-30 01:55:34 25 4
gpt4 key购买 nike

当我尝试使用 VS 2013 编译此文件时出现以下错误。我已链接该文件,因为它似乎太大而无法在此处复制和粘贴。

Payload.cc(77) : error C2275: 'spectralFrameWord' : illegal use of this type as an expressionPayload.cc(22) : see declaration of 'spectralFrameWord'Payload.cc(77) : error C2228: left of '.words' must have class/struct/union

Code

#include <cstdio>
#include <cstdint>
using namespace std;

long getFileSize(FILE *file) {
long currentPosition, endPosition;
currentPosition = ftell(file);
fseek(file, 0, 2);
endPosition = ftell(file);
fseek(file, currentPosition, 0);
return endPosition;
}

struct frame {
uint8_t bytes[535];
};

struct spectralFrame {
uint8_t bytes[512];
};

struct spectralFrameWord {
uint16_t words[256];
};

int main() {
char *filePath = "C:\\Payload\\Untitled.bin";
uint8_t *fileBuffer;
FILE *file = NULL;
file = fopen(filePath, "rb");
/* if((file = fopen(filePath, "rb")) == NULL)
cout << "Failure." << endl;
else
cout << "Success." << endl;
*/
long fileSize = getFileSize(file);
fileBuffer = new uint8_t[fileSize];
fread(fileBuffer, fileSize, 1, file);
fclose (file);
long frameCount = fileSize / 535;
frame *frames = new frame[frameCount];
for(int i = 0, j = 0, k = 0; i < fileSize; i++) {
frames[j].bytes[k++] = fileBuffer[i];
if((i % 534) == 0) {
j++;
k = 0;
}
}
delete fileBuffer;
fileBuffer = NULL;
spectralFrame *spectralFrames = new spectralFrame[frameCount];
for(int i = 0; i < frameCount; i++) {
for(int j = 22, k = 0; j < 534; j++) {
spectralFrames[i].bytes[k++] = frames[i].bytes[j];
}
}
delete frames;
frames = NULL;
spectralFrameWord *spectralFrameWords = new spectralFrameWord[frameCount];
uint16_t word;
for(int i = 0; i < frameCount; i++) {
for(int j = 0, k = 0; i < 511;) {
word = spectralFrames[i].bytes[j++] << 8;
spectralFrameWords[i].words[k++] = word | spectralFrames[i].bytes[j++];
}
}
delete spectralFrames;
spectralFrames = NULL;
filePath = "C:\\Payload\\Untitled.tsv";
file = fopen(filePath, "w");
/* if((file = fopen(filePath, "w")) == NULL)
cout << "Failure." << endl;
else
cout << "Success." << endl;
*/
for(int i = 0; i < 256; i++) {
fprintf (file, "%u\t%u\n", i, spectralFrameWord[0].words[i]);
}
fclose (file);
return 0;
}

最佳答案

你写的

spectralFrameWord[0].words

但是意味着

spectralFrameWords[0].words

编译器再清楚不过了。它说:

left of '.words' must have class/struct/union

所以这告诉你检查 words 左边的那个看看为什么它不符合要求。


当您使用 new sometype[...] 进行分配时您必须使用 delete[] 解除分配.使用 std::vector<T>可能更合适。

关于c++ - 错误 C2228 : left of '.words' must have class/struct/union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20598411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com