【问题标题】:How to create such C++ function that would take enum as parameter/argument and also return it?如何创建这样的 C++ 函数,它将枚举作为参数/参数并返回它?
【发布时间】:2011-11-04 16:28:48
【问题描述】:

我定义了一些枚举,例如(在标题中):

typedef enum { METHOD, URL, URL_PARAM, URL_VALUE, VERSION, HEADER_KEY, HEADER_VALUE, BODY, OK } http_request_parser_state;

我尝试创建这样的函数(在 Cpp 文件中):

    http_request_parser_state class_name::parse_buffer( http_request_parser_state parser_state)
{
 return parser_state;
}

但我收到如下错误:

Error   1   error C2143: syntax error : missing ';' before 'parse_buffer'   
Error   5   error C2371: 'parse_buffer' : redefinition; different basic 
etc

那么如何定义枚举,使其可以同时返回和函数参数呢?

【问题讨论】:

  • 它没有什么特别之处。那个简单的代码应该可以工作。如果这是 C++,typedef 也是 unneded。
  • 这两个代码片段是在同一个源文件中还是在单独的头文件和源文件中,它们之间是否还有其他内容?
  • 可以使用 gcc 和 clang 编译为 C 和 C++。
  • 最终将parser_state 作为链接传递并返回void

标签: c++ function parameters enums return


【解决方案1】:

你的 typedef 不是偶然地在一个类中声明的吗?如果是这样 - 你应该写class_name::http_request_parser_state class_name::parse_buffer( http_request_parser_state parser_state)

【讨论】:

    【解决方案2】:

    您的代码中有两处错误: 1. typedef 声明是不必要的,因为所有现代 c++ 编译器都将枚举识别为特殊类型 2. enum 的声明是这样的: enum TypeName { Values } VariableNames;

    因此,为了正常工作,您的代码应如下所示:

    enum http_request_parser_state { METHOD, URL, URL_PARAM, URL_VALUE, VERSION, HEADER_KEY, HEADER_VALUE, BODY, OK };
    
    http_request_parser_state class_name::parse_buffer( http_request_parser_state parser_state)
    {
     return parser_state;
    }
    

    这应该可行。

    【讨论】:

    • C++中不需要指定枚举名。
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多