2013-04-15 4 views
0

Я работаю над кодом C++, пытающимся создать игровую программу FlipIt. У меня есть файл заголовка и файл .cpp. В заголовочном файле у меня есть класс flipit, где одна из функций - это функция типа enum. Например, в файле заголовка FlipIt.h:C++ enum type как функция

(перечисление декларации)

enum Color { clear_ = false, solid_ = true }; 

(функция)

Color fetch(int row, int col) const; 

(В FlipIt.cpp файл это то, что я реализовал функцию в классе как)

int FlipIt::fetch(int row, int col) const 

Когда я делаю это VS2010 говорит IntelliSense: декларация несовместима с «Flipit: : Цвет FlipIt :: fetch (int row, int col) const "

Что это значит?

ответ

1

Это означает, что ваше обещанное возвращаемое значение FlipIt::Color в вашем объявлении вашего метода отличается от того типа, который вы предоставляете в своей реализации. И enum не int.
Попробуйте

FlipIt::Color FlipIt::fetch(int row, int col) const { } 

для реализации.

+0

Хорошо, это все еще объявленная функция-член класса FlipIt в FlipIt.h, если я попробую это для моей реализации? – 2013-04-15 05:44:40

+0

Да, конечно. Это было не очень очевидно для меня! –

2

Но Color не int. Это enum, и у него есть базовый тип (это зависит от компилятора), но в любом случае это другой тип.

0

Вы должны различать тип перечисления, в котором было указано пространство имен. Если ваше перечисление было определено только в файле заголовка, а не в файле cpp. Вы включаете заголовочный файл, компоновщик может найти тип определения, если вы определяете его в классе, вы должны добавить префикс класса. Компилятор может найти определение типа. Итак, если ваш тип перечисления был определен в глобальной области, проблем нет. если вы определяете в классе, вы должны использовать «Class :: Type».