Использование перечислений - PullRequest
3 голосов
/ 24 октября 2010

Я не могу понять одну проблему:

Types.hpp

enum SomeEnum { one, two, three };

First.hpp

#include "Types.hpp"
class First
{
   public: void someFunc(SomeEnum type) { /* ... */ }
};

Second.hpp

#include "Types.hpp"
#include "First.hpp"
class Second
{
   public: void Foo()
   {
      First obj;
      obj.someFunc(two); // two is from SomeEnum
   }
};

Тебя ошибка:

no matching function for call to ‘First::someFunc(SomeEnum)’
note: candidate is: void First::someFunc(First::SomeEnum)

Ответы [ 2 ]

2 голосов
/ 24 октября 2010

Я думаю, вы просто изменили это:

no matching function for call to ‘First::someFunc(SomeEnum)’
note: candidate is: void First::someFunc(First::SomeEnum)

не так ли:

no matching function for call to ‘First::someFunc(SomeEnum)’
note: candidate is: bool First::someFunc(First::SomeEnum)

В любом случае, это меняет дело.Объявлен ли enum внутри class First?Если это так, или если вы не знаете, просто попробуйте вызвать функцию, поставив First:: перед перечислением:

obj.someFunc( First::two ); // two is from SomeEnum
              ^^^^^^^
1 голос
/ 24 октября 2010

Я могу быть совершенно не прав в интерпретации ошибки компилятора, но

note: candidate is: void First::someFunc(First::SomeEnum)

Приводит меня к мысли, что вы объявили SomeEnum в определении First

class First
{
    SomeEnum {one, two, three};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...