struct作为c++中函数的类型

struct as a type for function in C++

本文关键字:类型 函数 作为 c++ struct      更新时间:2023-10-16

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

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

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

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

变化:

my_message_t Messages::create_message(my_message_type_e type)

:

Messages::my_message_t Messages::create_message(my_message_e type)
^^^^^^^^^^

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

Messages::my_message_t Messages::create_message(my_message_type_e type)