Inicjalizacja static const array

Inicjalizacja static const array
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
mam problem z zainicjalizowaniem tablicy (za dużo C# i jak trzeba wrócić do C++ zaczynają się problemy ;-) )
Fragmenty mojego kodu:

Kopiuj
class Display {

public:
		static const GLsizei VertexCount;
		static const GLsizeiptr PositionSize;
		static const glm::vec3 PositionData[VertexCount]; 

		(...)
};

	const GLsizei Display::VertexCount = 36;

	const GLsizeiptr Display::PositionSize = VertexCount * sizeof(glm::vec3);

	const glm::vec3 Display::PositionData[VertexCount] =
		{
			glm::vec3(0.0f,0.0f,0.0f),
			glm::vec3(0.0f,1.0f,0.0f),
			glm::vec3(1.0f,1.0f,0.0f),
			(...)
		};

Linia

Kopiuj
static const glm::vec3 PositionData[VertexCount]; 

powoduje błąd IntelliSense: expression must have a constant value
Dlaczego? Przecież inicjalizuję rozmiar od stałego, statycznego VertexCount.

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Wartość musi być znana już w miejscu deklaracji tablicy, musisz to 36 przenieść do definicji VertexCount w pliku nagłówkowym.

adf88
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak jak przedmówca podpowiedział:

Kopiuj
class Display {
 
public:
                static const GLsizei VertexCount = 36;
                static const glm::vec3 PositionData[VertexCount]; 
                static const GLsizeiptr PositionSize = VertexCount * sizeof(glm::vec3);
                 (...)
};
         const glm::vec3 Display::PositionData[VertexCount] = ...

lub tak

Kopiuj
class Display {
 public:
                static const GLsizei VertexCount;
                static const GLsizeiptr PositionSize;
                static const glm::vec3 PositionData[]; 
                 (...)
};
        const GLsizei Display::VertexCount = 36;
        const glm::vec3 Display::PositionData[VertexCount] = ...
        const GLsizeiptr Display::PositionSize = VertexCount * sizeof(glm::vec3);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.