我上课了。类具有结构_tree_branch_m
和类成员函数。该结构是成员函数的参数。在成员函数内部,我有一个错误来访问结构成员。我的结构出了什么问题? <{1}}无法解决错误。
Field 'NodeType'
答案 0 :(得分:3)
3.3.2 / 6 首先在 elaborated-type-specifier 中声明的类的声明点如下:
- 表格
的声明class-key attribute-specifier-seq_opt identifier;
标识符在范围内被声明为类名 包含声明,否则
- 表格
的 elaborated-type-specifier类密钥标识符
...标识符在最小的命名空间或块中声明 包含声明的范围。
当您编写typedef struct _tree_branch_m *Tree_m;
时,struct _tree_branch_m
在全局范围内::_tree_branch_m
转发声明一个名称。 Tree_m
与CascadeClassifier::_tree_branch_m
没有任何关联。
您需要显式地向前声明成员结构:
class CascadeClassifier{
struct _tree_branch_m; // forward delcaration
typedef _tree_branch_m *Tree_m;
struct _tree_branch_m {...};
};
答案 1 :(得分:2)
行动中的示例:http://ideone.com/OxaJVj
您可以在将结构分配给typedef的同时声明结构。我不知道这是否是犹太洁食,我必须检查标准。但只需将这两个步骤分开就可以了:
typedef struct _tree_branch_m *Tree_m;
到
struct _tree_branch_m;
typedef _tree_branch_m *Tree_m;
话虽如此,我建议不要使用前导下划线,因为即使你在技术上没有违反标准,如果你要把T大写或者把第二个_或者把它移到全局命名空间你' d违反保留名称。