我正在学习C ++,并且正在尝试创建一个函数,其返回类型为“my_message_t”,该函数在类定义中定义。但是当我尝试编译它时,编译器告诉我错误:'my_message_t'没有命名类型
我有以下代码(protocols.h和protocols.cpp)
namespace Protocols {
class Messages {
public:
typedef struct _my_message_t {
//stuffs
} my_message_t;
typedef enum {
//stuffs
} my_message_e;
private:
my_message_t my_msg;
my_message_e msg_en;
public:
Messages();
~Messages();
my_message_t create_message(const my_message__e);
};
};
类定义如下:
namespace Protocols {
Messages::Messages(){
//stuff
};
Messages::~Messages(){
//stuffs
}
my_message_t Messages::create_message(my_message_e type){
my_message_t msg;
//do stuffs
return msg;
}
}
为什么我无法创建类型为my_message_t
的函数?如何修复上面的代码?
答案 0 :(得分:9)
my_message_t
的范围是Messages
类,因此在类成员之外使用时需要限定:
Messages::my_message_t Messages::create_message(my_message_e type){
^^^^^^^^^^
// do stuffs
}
注意,在函数参数列表中不需要那个,只需要返回类型;语言的怪癖意味着参数列表在函数内部作用域,而返回类型在外部。
答案 1 :(得分:4)
变化:
my_message_t Messages::create_message(my_message_type_e type)
为:
Messages::my_message_t Messages::create_message(my_message_e type)
^^^^^^^^^^
答案 2 :(得分:2)
my_message_t
是在类Messages
内定义的类型,因此您需要:
Messages::my_message_t Messages::create_message(my_message_type_e type)