2015-10-23 89 views
1

我是一名業餘C++編碼人員,我開始使用類和對象。我想創建一個小小的「程序」,將人的生日和姓名顯示出來。我創建了一個程序,您只需輸入生日的日期,年份和月份,並顯示它的名稱&。我一直在People.h和People.cpp中發現錯誤: 「Member declaration not found」 error,and candidate are:std :: People :: People(const std :: People &)People.h原型 '的std ::人::人()' 不匹配任何類'的std ::人民People.cpp未找到C++成員聲明

我包括Birthday.h和Birthday.cpp在兩個圖像在底部如果你需要這些。對不起,我的雜亂格式,這是我的第二篇文章,我試圖讓事情可讀,但我有點失敗。 :P

My Main.cpp is: 

#include "Birthday.h" 
#include "People.h" 
#include <iostream> 
using namespace std; 

int main() { 

    Birthday birthObj(4,16,2002); 

    People ethanShapiro("Ethan Shapiro", birthObj); 

    return 0; 
} 

People.h is: 

    #ifndef PEOPLE_H_ 
#define PEOPLE_H_ 
#include <iostream> 
#include "Birthday.h" 
#include <string> 

namespace std { 

class People { 
    public: 
     People(string x, Birthday bo); 
     void printInfo(); 
    private: 
     string name; 
     Birthday dateOfBirth; 
}; 

} 

#endif 

People.cpp is: 

    #include "People.h" 

namespace std { 

People::People(): name(x), dateOfBirth(bo) { 
} 

void People::printInfo(){ 
    cout << name << " is born in"; 
    dateOfBirth.printDate(); 
} 

} 

Birthday.h Birthday.cpp

+1

你可能不應該把自己的班'命名空間std'。這不是問題所在,但它違背了命名空間的目的(使用自己的命名空間而不是非法侵入C++標準的命名空間)。 – skyking

+0

你是什麼意思(在C++標準的命名空間中使用我自己的命名空間而不是trspass?是否意味着使用名稱空間peo **來創建一個新的命名空間,如**來放人? –

回答

2

People唯一的構造函數聲明爲:

People(string x, Birthday bo); 

,並要定義構造函數:

People::People(): name(x), dateOfBirth(bo) { 
} 

定義並不符合任何d eclaration。

您需要使用:

People::People(string x, Birthday bo): name(x), dateOfBirth(bo) { 
} 
+0

非常感謝:)。我只有一個問題,爲什麼我需要將字符串和對象聲明爲成員(或將冒號放入父項之後)。 –

+0

你是否在構造函數定義中的':'之後使用'name(x),dateOfBirth(op)'? –

+1

@EthanShapiro'People :: People(string x,Birthday bo)'和':name(x),dateOfBirth(bo)'都是爲了不同的目的。前者指定將使用參數'string'和'Birthday'調用構造函數,而後者則僅使用構造函數中傳遞的參數初始化類'name'和'dateOfBirth'類的成員。這樣做的等效方法是:'People :: People(string x,Birthday bo){name = x; dateOfBirth = bo; }'。 –