1

我对将结构作为类成员的语法有一些疑问。

我有这个结构:

/*  POS.H   */
#ifndef POS_H
#define POS_H
struct pos{
    int x;
    int y;

    pos operator=(const pos& a){
        x=a.x;  y=a.y;
        return a;
    }

    pos operator+(const pos& a)const {
        return (pos){a.x+x,a.y+y};
    }

    bool operator==(const pos& a)const {
        return (a.x==x && a.y== y);
    }
};
#endif /* POS_H */

在另一个文件中有主要功能:

/* MAIN.CPP */
#include "pos.h"
#include "clase.h"
int main(){
    pos pos;
    pos.x=0;
    pos.y=0;
    clase clase();
}

然后包含类 clase 的文件 case.h 有 3 个不同的内容。

这编译得很好:

#include "pos.h"
class clase{
    private:
        pos posi;
    public:
        clase(pos pos):posi(pos){};
};

这不会编译(只是更改成员的名称):

#include "pos.h"
class clase{
    private:
        pos pos;
    public:
        clase(pos pos):pos(pos){};

这也可以很好地编译(使用 pos 作为 neme 但使用关键字 struct):

#include "pos.h"
class clase{
    private:
        struct pos pos;
    public:
        clase(struct pos pos):pos(pos){};
};

我的问题是:为什么这些代码编译或不编译?

4

1 回答 1

1

传统上,将成员命名为与结构名称相同的名称并不是一个好的编码习惯,除非您强制执行结构类型,否则当您尝试声明一个名为 pos 的私有成员时,看起来编译器会感到困惑。

简而言之,这只是命名冲突,您应该养成命名成员与结构或对象名称略有不同的习惯。也许在 TitleCase 中命名您的结构和对象,然后在您的成员上使用 camelCasing。在此示例中,将结构命名为 POS,然后在 clase 中命名为:POS mPos;

于 2012-12-27T04:19:21.793 回答