shows error when creating class DATA in Xcode for c project
xtech45

#include <stdio.h>
#include <allegro5/allegro.h>

class DATA {
public :
ALLEGRO_MUTEX *mutex;
ALLEGRO_COND *cond;
float posiX;
float posiY;
bool modi_x;
bool ready;
DATA() :
mutex(al_create_mutes()),
cond(al_create_cond()),
posiX(0);
posiY(0);
modi_X(false),
ready(false){}
-DATA()
{
al_destroy_mutex(mutex);
al_destroy_cond(cond);
}
};

const float FPS =30;
const int SCREEN_H =640;

int main()
{

return 0;
}

the following error appears when i type this in Xcode and the language is c

1) Excepted ';' after top level deflator
2) unknown type name class

why is this happening and should i need to include any header or is there any work around for this ??? ??? ???

Edgar Reynaldo
xtech45 said:

DATA() :
mutex(al_create_mutes()),
cond(al_create_cond()),
posiX(0);
posiY(0);
modi_X(false),
ready(false){}

Look right after posiX(0) and posiY(0) - you used two semicolons instead of commas.

xtech45

I have changed that and i still get the same error and it shows an error at the starting itself stating UNKNOWN TYPE NAME and EXPECTED SEMICOLON

under which header does the class comes ????????????

Edgar Reynaldo

You also mis-spelled al_create_mutex as mutes. There are probably other things too. Post the whole code, use code tags. <code>code goes here</code>

xtech45
#SelectExpand
1 2#include <stdio.h> 3#include <allegro5/allegro.h> 4 5class DATA { 6 7 public : 8 9 ALLEGRO_MUTEX *mutex; 10 ALLEGRO_COND *cond; 11 float posiX; 12 float posiY; 13 bool modi_x; 14 bool ready; 15 DATA() : 16 mutex(al_create_mutes()), 17 cond(al_create_cond()), 18 posiX(0), 19 posiY(0), 20 modi_X(false), 21 ready(false){} 22 -DATA() 23 { 24 al_destroy_mutex(mutex); 25 al_destroy_cond(cond); 26 } 27}; 28 29const float FPS =30; 30const int SCREEN_H =640; 31 32int main() 33{ 34 35 return 0; 36}

this is actually a tutorial from the allegro site itself and
http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Threads
this is the link of the code

Elias

It's "~DATA" not "-DATA". What if you just copy and paste the complete tutorial?

Thomas Fjellstrom

Also make sure you created the file as a c++ file, rather than c.

Edgar Reynaldo
xtech45 said:

this is actually a tutorial from the allegro site itself and
http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Threads
this is the link of the code

yes, but the tutorial doesn't have those errors...

xtech45
#SelectExpand
1#include <stdio.h> 2#include <allegro5/allegro.h> 3 4class DATA{ 5 6 public: 7 8 ALLEGRO_MUTEX *mutex; 9 ALLEGRO_COND *cond; 10 float posiX; 11 float posiY; 12 bool modi_X; 13 bool ready; 14 15 DATA() : mutex(al_create_mutex()), 16 cond(al_create_cond()), 17 posiX (0), 18 posiY (0), 19 modi_X(false), 20 ready (false) {} 21 22 ~DATA(){ 23 24 al_destroy_mutex(mutex); 25 al_destroy_cond(cond); 26 27 } 28 29}; 30 31const float FPS = 30; 32const int SCREEN_W = 640; 33const int SCREEN_H = 480; 34const int BOUNCER_SIZE = 32; 35 36static void *Func_Thread(ALLEGRO_THREAD *thr, void *arg); 37 38int main(int argc, char **argv){ 39 40 ALLEGRO_DISPLAY *display = NULL; 41 ALLEGRO_EVENT_QUEUE *event_queue = NULL; 42 ALLEGRO_TIMER *timer = NULL; 43 ALLEGRO_BITMAP *bouncer = NULL; 44 ALLEGRO_THREAD *thread_1 = NULL; 45 ALLEGRO_THREAD *thread_2 = NULL; 46 47 bool redraw = true; 48 49 if(!al_init()) { 50 fprintf(stderr, "failed to initialize allegro!\n"); 51 return -1; 52 } 53 54 if(!al_install_mouse()) { 55 fprintf(stderr, "failed to initialize the mouse!\n"); 56 return -1; 57 } 58 59 timer = al_create_timer(1.0 / FPS); 60 if(!timer) { 61 fprintf(stderr, "failed to create timer!\n"); 62 return -1; 63 } 64 65 display = al_create_display(SCREEN_W, SCREEN_H); 66 if(!display) { 67 fprintf(stderr, "failed to create display!\n"); 68 al_destroy_timer(timer); 69 return -1; 70 } 71 72 bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE); 73 if(!bouncer) { 74 fprintf(stderr, "failed to create bouncer bitmap!\n"); 75 al_destroy_display(display); 76 al_destroy_timer(timer); 77 return -1; 78 } 79 80 al_set_target_bitmap(bouncer); 81 al_clear_to_color(al_map_rgb(255, 0, 255)); 82 al_set_target_bitmap(al_get_backbuffer(display)); 83 event_queue = al_create_event_queue(); 84 85 if(!event_queue) { 86 fprintf(stderr, "failed to create event_queue!\n"); 87 al_destroy_bitmap(bouncer); 88 al_destroy_display(display); 89 al_destroy_timer(timer); 90 return -1; 91 } 92 93 al_register_event_source(event_queue, al_get_display_event_source(display)); 94 al_register_event_source(event_queue, al_get_timer_event_source(timer)); 95 al_register_event_source(event_queue, al_get_mouse_event_source()); 96 al_clear_to_color(al_map_rgb(0,0,0)); 97 al_flip_display(); 98 al_start_timer(timer); 99 100 DATA data; 101 102 thread_1 = al_create_thread(Func_Thread, &data); 103 al_start_thread(thread_1); 104 105 al_lock_mutex(data.mutex); 106 while (!data.ready){ 107 108 al_wait_cond(data.cond, data.mutex); 109 110 } 111 al_unlock_mutex(data.mutex); 112 113 al_lock_mutex(data.mutex); 114 data.modi_X = true; 115 data.ready = false; 116 al_unlock_mutex(data.mutex); 117 118 thread_2 = al_create_thread(Func_Thread, &data); 119 al_start_thread(thread_2); 120 121 al_lock_mutex(data.mutex); 122 while (!data.ready){ 123 124 al_wait_cond(data.cond, data.mutex); 125 126 } 127 al_unlock_mutex(data.mutex); 128 129 130 while(1) 131 { 132 ALLEGRO_EVENT ev; 133 al_wait_for_event(event_queue, &ev); 134 135 if(ev.type == ALLEGRO_EVENT_TIMER) { 136 redraw = true; 137 } 138 else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { 139 break; 140 } 141 else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) { 142 break; 143 } 144 if(redraw && al_is_event_queue_empty(event_queue)) { 145 redraw = false; 146 147 al_lock_mutex(data.mutex); 148 float X = data.posiX; 149 float Y = data.posiY; 150 al_unlock_mutex(data.mutex); 151 152 al_draw_bitmap(bouncer, X, Y, 0); 153 154 al_flip_display(); 155 } 156 } 157 al_destroy_thread(thread_1); 158 al_destroy_thread(thread_2); 159 160 al_destroy_bitmap(bouncer); 161 al_destroy_timer(timer); 162 al_destroy_display(display); 163 al_destroy_event_queue(event_queue); 164 165 return 0; 166} 167 168 static void *Func_Thread(ALLEGRO_THREAD *thr, void *arg){ 169 170 DATA *data = (DATA*) arg; 171 float num = 0.1; 172 173 al_lock_mutex(data->mutex); 174 175 bool modi_X = data->modi_X; 176 data->ready = true; 177 al_broadcast_cond(data->cond); 178 179 al_unlock_mutex(data->mutex); 180 181 while(!al_get_thread_should_stop(thr)){ 182 183 al_lock_mutex(data->mutex); 184 if(modi_X) 185 data->posiX += num; 186 else 187 data->posiY += num; 188 al_unlock_mutex(data->mutex); 189 190 al_rest(0.01); 191 192 } 193 194 195 return NULL; 196 }

this is entire code and even after saving it as c++ file i get the same error
can anyone sort this out

Arthur Kalliokoski

I don't get any errors compiling that. Which compiler are you using, what options or command line etc.?

[EDIT]

nevermind

xtech45 said:

when i type this in Xcode and the language is c

It has to be compiled as C++. I don't know what Xcode is, try g++.

xtech45

hmm okay will try it from that , but you need to include all the library into the g++ compiler before compiling it right

Arthur Kalliokoski
xtech45 said:

you need to include all the library into the g++ compiler before compiling it right

Which library? Allegro? You have to link it in somewhere to get an executable, even with C.

xtech45

ya allegro only and how do i link it and is there any links or guidance for how to link it to get an executable

gezegond

xcode is for iOS development afaik.

https://en.wikipedia.org/wiki/Xcode

Thread #613728. Printed from Allegro.cc