通过函数返回enum
Return enum through a function
我试着研究了这个问题,但是找到了一个适合我情况的解决方案。
所以我试图为mysql字段的元数据做一个基本的包装:
#pragma once
#include <string>
#include <stdint.h>
#include <windows.h>
#include "mysql.h"
namespace escobar { namespace storage {
class mysql_field_metadata
{
private:
uint32_t result_index; /* For indexing the field for a mysql record. */
std::string name; /* The name of the column. */
std::string original_name; /* The original name of the column, if the name is an alias. */
std::string table; /* Name of the table */
std::string original_table; /* The original name of the table, if the table name is an alias. */
std::string database; /* The name of the database the table/record belongs to. */
uint32_t length; /* The length of the field. */
uint32_t max_length; /* The maximum length of the set. */
uint32_t decimals; /* Number of decimals used in the field. */
uint32_t charset; /* Table charset. */
enum enum_field_types type; /* The type of MYSQL data. */
public:
mysql_field_metadata(MYSQL_FIELD* field_data, uint32_t _result_index) :
result_index(_result_index), name(field_data->name),
original_name(field_data->org_name), table(field_data->table),
original_table(field_data->org_table), database(field_data->db),
length(field_data->length), max_length(field_data->max_length),
decimals(field_data->decimals), charset(field_data->charsetnr),
type(field_data->type)
{
}
~mysql_field_metadata(void) { }
std::string get_name(void) { return this->name; }
std::string get_original_name(void) { return this->original_name; }
std::string get_table(void) { return this->original_name; }
std::string get_original_table(void) { return this->original_table; }
std::string get_database(void) { return this->database; }
uint32_t get_length(void) { return this->length; }
uint32_t get_max_length(void) { return this->max_length; }
uint32_t get_decimals(void) { return this->decimals; }
uint32_t get_charset(void) { return this->charset; }
enum emum_field_types get_type(void) { return this->type; }
};
}}
如你所见,我的最后一个函数:
enum emum_field_types get_type(void) { return this->type; }
它似乎不工作,我得到以下错误:
error C2440: 'return' : cannot convert from 'enum_field_types' to 'escobar::storage::emum_field_types'
1> Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
您不需要前缀enum
。您可以尝试从函数和成员中删除它并返回报告。这可能会混淆编译器。
enum_field_types type; /* The type of MYSQL data. */
...
emum_field_types get_type(void) {
编辑:要修复您的"标识符未声明"问题,如果在名称空间中使用namespace::typename
语法,如果没有名称空间,则使用::typename
从编译器错误来看,似乎enum_field_types
有两个不同的声明。可能一个在名称空间内,另一个是全局的。您有两种可能的解决方案:
-
如果这两个声明都在你自己的代码中,你可以跟踪这两个声明并删除其中一个
-
您可以使用
namespace::typename
语法限定使用哪个声明。
选择1。应该是首选,因为对两个不同的声明使用相同的名称,特别是当其中一个声明在全局命名空间中时,可能会导致一些微妙的错误和编译器错误。
相关文章:
- enum是C++中的宏变量还是整数变量
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 返回enum或通过引用传递enum
- 好的样式-返回enum或int
- C++函数,接受enum并返回要在模板中使用的typedef类类型
- 从成员函数返回enum
- 通过ENUM查找返回元组值(不同类型)的模板函数
- 返回特定于类的enum
- 如何创建这样的c++函数,将enum作为参数/参数,并返回它
- 构造函数中使用的c++ Enum返回函数
- 从其他类的成员函数返回ENUM(在一个类中定义)
- 通过函数返回enum