Koodatessani vektorieditoria tuli typedef structien kanssa riitaa,
g++ valittaa seuraavaa:
main.cpp: In function âvoid drawpoly(kpoly)â: main.cpp:51: error: conversion from âkline**â to non-scalar type âklineâ requested
Se palanen koodista joka tämän luultavimmin aiheuttaa:
typedef struct { int x,y,ax,ay,x2,y2,ax2,ay2; int cr, cg, cb; } kline; typedef struct { kline *l[100]; int cr, cg, cb; int x, y; } kpoly;
Miten tämän voi korjata?
(Koko koodi toimii kyllä jos l-muuttujasta ei tee arrayta, joka on perin outoa.)
Mikäli nyt oikein ymmärsin(=arvasin; et ole sisällyttäny mm. virheen aiheuttamaa kohtaa viestiisi) tilanteen, sinulla on 2 virhettä:
1. Mikäli kpoly-struktin nyt on tarkoitus esittää nimensä mukaisesti polygonia, pitäisi sen sisältää joukko viivoja, ei osoittima viivoihin. Eli kpoly-struktin määrittelyyn siis
kline l[100];
eikä
kline* l[100];
.
2. main.cpp-tiedoston rivillä 51 sattunut virhe, jossa olet todennäköisesti viitannut koko taulukkoon, kun olisi pitänyt viitata vain yhteen sen jäsenistä.
moka *hups;
Korjasin osoittajan, rivin numero 51 ja toimii.
Kiitos.
Muuten, jos meinaa koodailla C++:aa, typedef struct
-jutut ovat turhia kiemuroita. Esmes
struct kline { int x,y,ax,ay,x2,y2,ax2,ay2; int cr, cg, cb; }; struct kpoly { kline l[100]; int cr, cg, cb; int x, y; };
on syntaksin kannalta selkeämpi.
Muuten nro 2, onko polygoni ohjelmassasi sellainen värkki, jossa on aina justiinsa sata viivaa? Tuo tyypinmäärittely nimittäin sanoo juurikin niin, ja minä olen pikkuisen epäileväinen.
Käytetyt rakenteet pitäisi aina tehdä aiotun tarkoituksen mukaan ja siihen C++ antaa aika hyvät keinot. Jossain kirjassakin annettiin sellainen koodausohje, että "sano mitä tarkoitat; ymmärrä mitä sanot".
Hassu polygoni sellainen, jossa on sata vapaavalintaista viivaa. Nehän voivat silloin vaikka lähteä kaikki samasta pisteestä eri suuntiin, ja mikäs polygoni se sellainen muka on? Kärkipisteiden avulla nuo on järkevämpi ilmaista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.