2013-12-21 2 views
1

FINAL EDIT: Я худший человекC++ 11 перечислений в заголовочном файле

Я поднял голову и, по-видимому, в Qt-Creator вы должны указать, нужно включить C++ 11 в конфигурации .pro файл. Я сделал это, все работает нормально. Я извиняюсь.

Так ясно, что я ужасен в Гуглинге, или мне не хватает совета, которого я так отчаянно хочу.

Я пытался помещать enum в заголовок, чтобы сделать его доступным для других файлов в моем текущем проекте.

//Drawing.h 
enum class Drawing {Line, Square, Triangle}; 

//action.cpp 
#include "Drawing.h" 

Drawing analyzeStuff(VertexArray vertices){ 
    Drawing theDrawing; //This is fine. 
    if(...) 
     theDrawing = Drawing::Line; //This brings up an error. 
    //...Other else-ifs using the same thing. 
    return theDrawing; //This is also fine. 
} 

EDIT: Важно ли упоминать, что у меня есть второй класс в этом заголовочном файле? Я сомневаюсь, но это действительно единственное изменение между этим кодом и моим собственным.

+6

Что такое сообщение об ошибке? Какой компилятор? – dyp

+0

Пожалуйста, не отправляйте код, который работает и зловеще ссылается на некоторую ошибку, которая не существует. –

+0

@DyP Сообщение об ошибке говорит, что чертеж не является классом или пространством имен. Я использую Qt-Creator, который говорит мне только 64-разрядный GCC x86, который он автоматически получает. Он признает, что это работает только в C++ 11 или gnu ++ 11, но он говорит, что он включен по умолчанию. – Jash

ответ

3

Nope, there's no problem here.

Убедитесь, что вы на самом деле компиляции в C++ 11, с компилятором, который имеет поддержку контекстных перечислений.

Обратите внимание, что C++ на самом деле не заботится о файлах заголовков. Вы можете буквально скопировать и вставить содержимое своего заголовочного файла в исходный файл (заменив директиву #include), чтобы создать тестовый файл.

+0

Я неверно истолковал сообщение Qt-Creator «включено по умолчанию» для C++ 11/gnu ++ 11 – Jash

1

Я думаю, что ваш компилятор не поддерживает стандарт C++ 2011. Меняем

theDrawing = Drawing::Line; 

в

theDrawing = Line; 
+1

Если проблема связана с поддержкой C++ 11, не должна ли первая ошибка возникать в декларации класса enum? – Casey

+0

Вы правы. В C++ 2003 нет скопированных перечислений. Поэтому удалите класс ключевого слова из определения перечисления. –

+0

Из вопроса: 'Рисование theDrawing; //Это отлично. ' –

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