Tags:
c++
class Objects
{
public:
float Vertex[8][3];
int Edge[12][2];
int FaceCount[2];
int FaceConnect[6];
};
Objects Plane;
Plane.Vertex = {{0,0,0}, {1,0,0}, {0,1,0}, {1,1,0}};
Plane.Edge = {{0,1}, {0,2}, {1,3}, {2,3}, {0,3}};
Plane.FaceCount = {3, 3};
Plane.FaceConnect = {0, 2, 3, 0, 1, 3};
9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
class Objects
{
public:
float Vertex[8][3];
int Edge[12][2];
int FaceCount[2];
int FaceConnect[6];
};
Objects Plane;
Plane.Vertex = {{0,0,0}, {1,0,0}, {0,1,0}, {1,1,0}};
Plane.Edge = {{0,1}, {0,2}, {1,3}, {2,3}, {0,3}};
Plane.FaceCount = {3, 3};
Plane.FaceConnect = {0, 2, 3, 0, 1, 3};
Hej Mikkel
Så vidt jeg husker er det du prøver på at lave intialisering af dine array's. Dette er fuld lovlig hvis du gjorde når du erkære dine array's, men vist ikke efter de er erklæret.
Eks:
void func(void)
{
int tmp[4] = {1,2,...}; //lovlig
int tmp[4]; //ulovlig
tmp ={1,2,3...}; //ulovlig
Så du kan nok bliver nød til at lave en løkke til at intialisere dine array's.
Hilsen Thomas
Jeg har prøvet at lave den lidt om til:
#include <iostream>
class Objects
{
public:
void setVertex( float IndVertex[3] );
float getVertex();
private:
float Vertex[3];
};
void Objects::setVertex( float IndVertex[3] )
{
Vertex[3] = IndVertex[3];
};
float Objects::getVertex()
{
return Vertex[3];
};
int main()
{
Objects Plane;
float Ver[3] = {0.5, 0.5, 0.5};
Plane.setVertex ( Ver );
std::cout << Plane.getVertex();
return 0;
};
Den compiler og linker men når den kører programmet siger den:
"Unhandled exception in Text1.exe: 0xC0000005: Access Violation"
Her gør du det samme som før. Først bliver de deklæret og derefter initialiseret. Du slipper nok ikke for løkken...eller måske du kan gøre det i din constructor ?:
//Jeg har ikke prøvet dette
Objects::Objects(float IndVertex[3]) : Vertex(IndVertex)
{
}
Ellers kan du gøre dette:
Objects::setVertex(float IndVertex[3])
{
Vertex[0] = IndVertex[0];
Vertex[1] = IndVertex[1];
Vertex[2] = IndVertex[2];
}
0
Jeg har prøvet at lave den lidt om til:
#include <iostream>
class Objects
{
public:
void setVertex( float IndVertex[3] );
float getVertex();
private:
float Vertex[3];
};
void Objects::setVertex( float IndVertex[3] )
{
Vertex[3] = IndVertex[3];
};
float Objects::getVertex()
{
return Vertex[3];
};
int main()
{
Objects Plane;
float Ver[3] = {0.5, 0.5, 0.5};
Plane.setVertex ( Ver );
std::cout << Plane.getVertex();
return 0;
};
Den compiler og linker men når den kører programmet siger den:
"Unhandled exception in Text1.exe: 0xC0000005: Access Violation"
0
#include <iostream>
class Objects
{
public:
void setVertex( float IndVertex[3][3] );
float getVertex();
private:
float Vertex[3][3];
};
void Objects::setVertex( float IndVertex[3][3] )
{
Vertex[0][0] = IndVertex[0][0];
Vertex[1][0] = IndVertex[1][0];
Vertex[2][0] = IndVertex[2][0];
Vertex[0][1] = IndVertex[0][1];
Vertex[1][1] = IndVertex[1][1];
Vertex[2][1] = IndVertex[2][1];
Vertex[0][2] = IndVertex[0][2];
Vertex[1][2] = IndVertex[1][2];
Vertex[2][2] = IndVertex[2][2];
}
float Objects::getVertex()
{
return Vertex[3][3];
}
int main()
{
Objects Plane;
Objects Plane2;
int stop;
float Ver[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}};
float Ver2[3][3] = {{1, 1, 1}, {1,1,1}, {1,1,1}};
Plane.setVertex ( Ver );
Plane2.setVertex( Ver2 );
std::cout << Plane.getVertex() << "\\n";
std::cout << Plane2.getVertex() << "\\n";
return 0;
}
Okay nu ser det ud til at virke...
Men hvordan kan det være at command prompt udskriver:
1.14838e-038
0
0
Okay nu ser det ud til at virke...
Men hvordan kan det være at command prompt udskriver:
1.14838e-038
0
Det er fordi du går ud over arrayet. Du har allokeret plads til tre gange tre floats men du returnerer den på plads 3,3 (altså række 4 kolonne 4) så det er tilfældigt, hvad du får.
Hvis du vil have dem alle sammen skrevet ud skulle du hellere overstyre << operatoren:
ostream & Objects::operator<<(ostream & out, Objects & o)
{
for(int row = 0; row < 3; row++)
{
for(int col = 0; col < 3; col++)
out << Vertex[row][col] << ",";
out << endl;
}
return out;
}
0
Men hvordan kan det være at nummer Plane2 altid returnere 0?.
int main()
{
Objects Plane;
Objects Plane2;
int stop;
float Ver[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}};
float Ver2[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}};
Plane.setVertex ( Ver );
Plane2.setVertex( Ver2 );
std::cout << Plane.getVertex() << "\\n";
std::cout << Plane2.getVertex() << "\\n";
return 0;
}
Plane og Plane2 har samme værdi men returnere noget forskelligt.
0
Og hvordan kan Plane returnere 1.14838e-038?
Den burde returnere 0 eftersom Vertex[3][3] = 0.
0
Nååh når man erklærer en array starter man fra 1 men når man definere en plads starter man fra 0 ja... Har aldrig helt forstået hvorfor.
0