У меня проблемы с многослойными указателями. В основном я читаю местоположения точек из файла и использую их для отображения полилиний.
Я пытаюсь создать динамически распределенную структуру данных, которая будет меняться в зависимости от информации, содержащейся в файле.
Каждый файл имеет такую структуру.
29 // number of polylines in the whole file
3 // first polyline, number of points in it
32 435 // first coordinate where x = 32 and y = 435
15 200
100 355
10 // second polyline, number of points in it
245 35
330 400
и т. Д.
Я создал структуру с координатами x и y для хранения координат для каждой точки
struct coordinates{
int x;
int y;
};
Я хочу создать такую структуру данных, как эта ...
Pointer --> array w/ num of polys
| | |
| | |
v v v
poly0 poly1 poly2 // arrays with coordinate structs
x1,y1 x1,y1 x1,y1
x2,y2 x2,y2 x2,y2
x3,y3 x3,y3 x3,y3
Вот как выглядит мой код
coordinates *** dinoPoints;
struct coordinates{
int x;
int y;
};
void myInit(void){...} // just has initialization stuff for the draw window
void loadDino (char * fileName)
{
fstream inStream;
inStream.open(fileName, ios ::in); // open the file
if(inStream.fail())
return;
GLint numpolys, numlines; // these are just regular ints
inStream >> numpolys; //reads in number of polys
//dynamically allocates the number of polys in file to datastructure
dinoPoints = new coordinates**[numpolys];
for(int j = 0; j < numpolys; j++){ // read each polyline
inStream >> numlines; // read in number of lines in polyline
dinoPoints[j] = new coordinates*[numlines];
for (int i = 0; i < numlines; i++){ // allocate each set of coords
dinoPoints[j][i] = new coordinates;
// read in specific point coordinates
inStream >> dinoPoints[j][i].x >> dinoPoints[j][i].y;
}
}
inStream.close();
}
void myDisplay(void)
{
drawDino(); // draws the dinosaur on the screen
}
//still writing this function. Calls myDisplay through glutDisplayFunc()
// and also calls loadDino with filename passed as a parameter
void main(int argc, char **argv){...}
По какой-то причине он выдает мне сообщение "выражение должно иметь тип classtype"
inStream >> dinoPoints [j] [i] .x >> dinoPoints [j] [i] .y;
Также обычно в среде IDE (Visual Studios 2010) отображаются различные элементы структуры данных после ввода периода, но после ввода «dinoPoints [j] [i].» Он не отображается ни с какими содержащимися элементами выбрать из, что означает, что он даже не знает, о чем я говорю в отношении dinoPoints [j] [i]
Кто-нибудь знает, что я делаю не так? Я чувствую, что что-то упускаю из-за того, как работают многоуровневые указатели, но я точно не знаю, что именно.