Недопустимые типы ‘int [int]’ для ошибки индексации массива

Я перехожу на C ++ из мира Java и пытаюсь перенести пример. Я получаю ошибку в том, что я не обращаюсь к своим массивам правильно. Я пытался указывать на них, используя обозначения -> и *, но мне трудно разобраться с этим. Я считаю, что это одна и та же основная ошибка, повторенная несколько раз. Я выделил три области, где начинаются ошибки, за исключением кратных одной и той же ошибки. Любая помощь будет иметь большое значение в моем понимании темы. Спасибо!

//--------------------------------------------------------------
void testApp::setup(){
colorCount = 20;
int *hueValues = new int[colorCount];
int *saturationValues = new int[colorCount];
int *brightnessValues = new int[colorCount];

ofColor::fromHsb(360, 100, 100, 100);
ofFill();
}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
// ------ colors ------
// create palette
for (int i=0; i<colorCount; i++) {
if (i%2 == 0) {
hueValues[i] = (int) random(0,360);                  // invalid types 'int[int]' fr array subscript
saturationValues[i] = 100;
brightnessValues[i] = (int) random(0,100);
}
else {
hueValues[i] = 195;
saturationValues[i] = (int) random(0,100);
brightnessValues[i] = 100;
}
}

// ------ area tiling ------
// count tiles
int counter = 0;
// row count and row height
int rowCount = (int)random(5,40);                  // At this point in file
float rowHeight = (float)ofGetHeight()/(float)rowCount;

for(int i=0; i<rowCount; i++) {
// seperate each line in parts
// how many fragments
int partCount = i+1;
parts = new float[0];                  // Cannot convert "float" to "float" in assignment

for(int ii=0; ii<partCount; ii++) {
// sub fragments or not?
if (random(1.0) < 0.075) {
// take care of big values
int fragments = (int)random(2,20);
partCount = partCount + fragments;
for(int iii=0; iii<fragments; iii++) {
parts = append(parts, random(2));
}
}
else {
parts = append(parts, random(2,20));
}
}

// add all subparts
float sumPartsTotal = 0;
for(int ii=0; ii<partCount; ii++) sumPartsTotal += parts[ii];

// draw rects
float sumPartsNow = 0;
for(int ii=0; ii<parts.length; ii++) {
// get component color values
int index = counter % colorCount;
fill(hueValues[index],saturationValues[index],brightnessValues[index]);

sumPartsNow += parts[ii];
rect(map(sumPartsNow, 0,sumPartsTotal, 0,width),rowHeight*i,
map(parts[ii], 0,sumPartsTotal, 0,width)*-1,rowHeight);

counter++;
}
}
}

0

Решение

Похоже, вы выделяете место для массивов в setup() функция, но ваши указатели определяются локально и, как таковые, выходят из области видимости, как только функция завершает выполнение; когда вы пытаетесь ссылаться на них в draw() функция, вы получаете ошибку компилятора, потому что символы не найдены / не определены правильно. Переместить int *hueValues/saturationValues/brightnessValues объявления в частном разделе testAPP заголовочный файл, сохраните код выделения (new int[coloCount]) в функции настройки, и тогда вы сможете ссылаться на массивы в draw() Функция без ошибок.

testApp.h:

private:
int* hueValues;
int* saturationValues;
int* brightnessValues;

testApp.cpp

void testApp::setup(){
hueValues = new int[colorCount];
...
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]