クラスのメンバーとして構造体を持つための構文についていくつか疑問があります。
私はこの構造体を持っています:
/* 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を含むファイルclase.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){};
};
私の質問は、なぜこれらのコードがコンパイルされるのか、コンパイルされないのかということです。