2010-10-24 134 views
3

我不明白一个问题:使用枚举

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) 
+0

你是否缺少.cpp文件?从你的列表中我看不到'First :: someFunc'调用的实际实现。 – wheaties 2010-10-24 18:14:28

+0

不可复制。什么是'EnvironTypes'? – kennytm 2010-10-24 18:14:57

+0

编译器在做什么? – 2010-10-24 18:15:05

回答

2

我觉得你只是改变了这一切:

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) 

无论如何,这改变了的东西。在class First内声明了枚举吗?

obj.someFunc(First::two); // two is from SomeEnum 
       ^^^^^^^ 
1

我可能完全bt后错在解释编译错误,但

note: candidate is: void First::someFunc(First::SomeEnum) 
:如果是这样,或者如果你不知道,只是试图调用功能,在枚举前puttung First::

引导我相信你声明SomeEnum里面的第一个定义

class First 
{ 
    SomeEnum {one, two, three}; 
}