我對構造類作爲成員的語法存在一些疑問。類內部的結構
我有這樣的結構:
/* 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){};
};
我的問題是:爲什麼這些代碼編譯或不?
因爲成員的名稱與類型相同(均爲'pos')。這是行不通的。 – jogojapan
這不是在做你認爲'clase clase();'這是一個函數的前向聲明。你可能的意思是'clase clase;' –
關閉投票人:答案可能沒有太大的實用價值,但它仍然是一個關於語言規則的簡單客觀問題,任何在編譯器,重構工具等工作的人都需要看看。 –