Jak naprawić błąd "expression must be a modifiable lvalue"?

0

Witam, stawiam pierwsze kroki w C++ i mam mały problem. Mianowicie zdefiniowałem sobie typ:

typedef float point3[3];
int N=20; 

Tworzę również dynamiczną tablicę dwuwymiarową tychże punktów:

point3 **Tab;
point3 punkt;

	Tab = new point3*[N];
	for(int i = 0; i < N; i++)
		Tab[N] = new point3[N];
 

Podczas próby wypełnienia tej tablicy floatami wyskakuje mi tytułowy błąd. Tablicę wypełniam w ten sposób:

 
int g =0, h = 0;

for(float u = 0; u<=1; u+=1/a)
	{
		h=0;
		for(float v = 0; v<=1; v+=1/a)
		{
			x = ...
			y = ...
			z = ...
			
			punkt[0] = x;
			punkt[1] = y;
			punkt[2] = z;

			Tab[g][h] = punkt;
			h++;
		}
		g++;
	}

Problematyczna jest linijka

Tab[g][h] = punkt; 

Pomoże ktoś?

2

Nie możesz przypisać tablic w ten sposób. Tak samo coś takiego nie przejdzie:

float a[3] = { 1, 2, 3 };
float b[3];
b = a;

Tym bardziej masz powód, żeby nie tworzyć punktów w ten sposób, bo to jest brzydkie. Lepszym pomysłem jest

struct point3
{
   float x, y, z;
};
0

Czyli powinienem przypisywać w następujący sposób:

       punkt.x = x1;
			punkt.y = y1;
			punkt.z = z1;
			
			Tab[g][h].x = punkt.x;
			Tab[g][h].y = punkt.y;
			Tab[g][h].z = punkt.z; 

???

1

Można i tak, ale lepiej tak:

            punkt.x = x1;
            punkt.y = y1;
            punkt.z = z1;
            Tab[g][h] = punkt;

lub tak:

            Tab[g][h].x = x1;
            Tab[g][h].y = y1;
            Tab[g][h].z = z1;
0

Coś robię źle, ponieważ przy próbie wstawienia czegokolwiek do tablicy wyrzuca mi błąd podczas wykonywania programu.

Mam następującą strukturę:

 
struct point3d
{
	float x,y,z;
};

Następnie tworzę dynamiczną tablicę dwuwymiarową tych punktów:

point3d **Tab;

Tab = new point3d*[N];
for(int i = 0; i < N; i++)
	Tab[N] = new point3d[N];
 

I podczas np. takiej próby wstawienia wyrzuca błąd:

	for(int i = 0; i < N; i++)
		for(int j =0; j < N; j++)
			{
				Tab[i][j].x = 0;
				Tab[i][j].y = 0;
				Tab[i][j].z = 0;
		}
 

Domyślam się, że chyba chodzi o coś z deklaracją tablicy ale nie mam pojęcia jak to zrobić.

0
Tab[i] = new point3d[N];
0

Rzeczywiście, tego się nie spodziewałem :D Dzięki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1