2012-02-01 4 views
3

Итак, я довольно новичок в программировании на C++, но я широко использовал SDL с python и FreeBASIC. Я уверен, что мне не хватает чего-то глупого здесь, но независимо от того, что я пытаюсь, я продолжаю получать ошибку «error: expected initializer before» namespace »в файле video.h. Это сводит меня с ума.Ожидаемый инициализатор перед пространством имен

#include "SDL/SDL.h" 
#include <iostream> 

namespace video { 
// This is here because like video, everything uses it and the players should never be able to touch it. 
int rolldice(int minimumroll, int maximumroll, int numberofdice); 
// Same Here. 
char* charraystring(std::string prestring); 
// Now we're in video proper 
// This function loads an image, checks to make sure it works, returns the image, and unloads the testing surface. 
SDL_Surface* loadimage(std::string path); 
// This is an optimized blitter that will exit with a signal if it encounters an error. 
void oblit(SDL_Surface* pic, SDL_Rect frame, SDL_Surface* screen, SDL_Rect location); 
} 
+0

Ошибка в какой строке? –

+0

Строка 4. Фактическое сообщение об ошибке: /home/dyngar/Workspace/C/CLAIR/video.h:4:1: ошибка: ожидаемый инициализатор перед «namespace» Извините, я скопировал ошибку из старой версии файла. – Jsmith

+0

Вы уверены, что это ваш весь файл? Номера строк в этой ошибке не совпадают –

ответ

10

Ошибка вы предлагаете, error: expected initializer before ‘namespace’ предполагает, что существует структура или объявление переменной, которая не прекращается. Что-то вроде:

struct foo { 
    ... 
} 

namespace video { 
    ... 

Здесь декларация 'struct foo' не заканчивается точкой с запятой. Это следует читать:

struct foo { 
    ... 
}; 

namespace video { 
    ... 

Получение препроцессора, участвующий (с помощью #include) делает этот тип вещи немного сложнее выследить. Возможно, вы включили заголовок (как раз перед тем, как сделать объявление namespace video), который, например, не завершает определение структуры.

Идите и убедитесь, что все ваши struct s и class es имеют точку с запятой после закрытия фигурной скобки в ваших заголовках и исходных файлах. Аналогично, любые объявления переменных, например.

int value // <-- oops, forgot the ';' 

namespace video { 
    ... 
+0

Это то, что я тоже подумал, но я не мог найти его. Я собираюсь просмотреть файл SDL/SDL.h, чтобы узнать, что у него есть. Я не знаю, насколько это актуально, но когда я пытаюсь скомпилировать, используя g ++ -I/home/dyngar/Workspace/C/CLAIR -std = gnu ++ 0x video.cpp -o video.o -lSDL , он работает просто хорошо. Что кажется действительно странным, но, как я уже сказал, я новичок в C++. – Jsmith

Смежные вопросы