0

我正在学习 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?如何修复上面的代码?

4

3 回答 3

9

my_message_t范围在Messages类内部,因此在类成员之外使用时需要限定:

Messages::my_message_t Messages::create_message(my_message_e type){
^^^^^^^^^^
    // do stuffs
}

请注意,您不需要在函数参数列表中,只需要返回类型;该语言的一个怪癖意味着参数列表在函数内部作用域,而返回类型在外部。

于 2013-05-06T13:59:50.753 回答
4

改变:

my_message_t Messages::create_message(my_message_type_e type)

到:

Messages::my_message_t Messages::create_message(my_message_e type)
^^^^^^^^^^
于 2013-05-06T13:59:13.750 回答
2

my_message_t是在 class 内部定义的类型Messages,因此您需要:

Messages::my_message_t Messages::create_message(my_message_type_e type)
于 2013-05-06T13:59:21.950 回答