Her yapının bir gök cismi temsil ettiği bir dizi yapı oluşturmaya çalışıyorum.
Yapılar konusunda pek tecrübem yok, bu yüzden bir sürü dizi yerine onları kullanmaya karar verdim. Ancak, birçok farklı hatayla karşılaşmaya devam ediyorum. Çeşitli iş parçacıkları ve StackOverflow'da gördüğüm teknikleri ( C ve C'deki yapı dizisi gibi - yapı dizisini başlat ) uygulamaya çalıştım , ancak bunların hepsi uygulanabilir değildi.
Şimdiye kadar okumuş olanlar için daha fazla bilgi: Dinamik olmak için bunların hiçbirine ihtiyacım yok, her şeyin boyutunu önceden biliyorum / tanımlıyorum. Ayrıca, buna argümanları tanımlayan birkaç farklı yöntemle (yani GLUT yöntemleri) eriştiğim için bunun global bir dizi olmasına da ihtiyacım var.
Başlığımdaki yapıyı bu şekilde tanımlıyorum:
struct body
{
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
};
Yapının iç kısmını tanımlamadan önce tanımladığım diğer küresel değişkenlerin bir listesi var ve bunlardan biri bu yapının dizisi (temelde, sisli konuşmamda çok net değilsem, aşağıdaki satır yukarıdaki şeylerin üzerindedir):
struct body bodies[n];
Bildiğiniz gibi, nmeşru olarak tanımladığım bir şey (yani #define n 1).
Bu diziyi birkaç farklı yöntemde kullanıyorum, ancak en kolay ve en az yer kaplayan, ana dizimin basitleştirilmiş bir şeklidir. Burada, bir şekilde değiştirmeden önce değişkenleri belirli bir şekilde ayarlamak için, yapıların her birindeki tüm değişkenleri başlatıyorum:
int a, b;
for(a = 0; a < n; a++)
{
for(b = 0; b < 3; b++)
{
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
}
bodies[a].mass = 0;
bodies[a].radius = 1.0;
}
Şu an karşılaştığım hata, nbody.c:32:13: error: array type has incomplete element type32. satırın yapı dizisini yaptığım yer.
Son bir açıklama, başlık ile yukarıdaki alanı kastediyorum, int main(void)ancak aynı *.cdosyada.
struct body bodies[n];öncestruct body {}beyan etmiyor musunuz ?