2013-04-28 26 views
5

Kendimi oldukça acemi C++ programcısı olarak görüyorum ve bu hatayı daha önce hiç yaşamadım. Ben sadece benim işlev için ama tüm std bir sınıf oluşturmak için :: benim başlık dosyasında bildirilmiştir öneki fonksiyonları çalışıyorumhatası: '_______' sınıfında bildirilen üye yok '_______'

//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
#ifndef PERSON_H 
#define PERSON_H 

#include <string> 

class Person 
{ 
    public: 
     Person(); 
     std::string getName(); //return first name 
     std::string getSurname();//return surname 
     int getWeight(); //return weight 
     int getBirthYear(); //return birthyear 


    private: 
//self explanatory member variables but need to be accessible to patient 
     std::string m_name; 
     std::string m_surname; 
     int m_weight; 
     int m_birthYear; 
}; 

#endif  

.Cpp

//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
#include "Person.h" 

Person::Person() 
{ 
    m_name = "name"; 
    m_surname = "surname"; 
    m_weight = 0; 
    m_birthYear = 0; 
    return; 
} 

//returns m_name 
std::string Person::getName() 
{ 
    return m_name; 
} 

//returns m_surname 
std::string Person::getSurname() 
{ 
    return m_surname; 
} 

//returns persnon's weight 
int Person::getWeight() 
{ 
    return m_weight; 
} 

//returns the person's birth year 
int Person::getBirthYear() 
{ 
    return m_birthYear; 
} 

main kabul edilmiyor

//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
//comments 
#include "Person.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
// Person matt; 
// cout << matt.getName() << endl; 
// cout << matt.getSurname() << endl; 
// cout << matt.getWeight() << endl; 
// cout << matt.getBirthYear() << endl; 
    return 0; 
} 

Ve bu

alıyorum hatadır
g++ Main.cpp Person.h Person.cpp -o test 
Person.cpp: In constructor ‘Person::Person()’: 
Person.cpp:17:2: error: ‘m_name’ was not declared in this scope 
Person.cpp:18:2: error: ‘m_surname’ was not declared in this scope 
Person.cpp: At global scope: 
Person.cpp:35:29: error: no ‘std::string Person::getName()’ member function declared in class ‘Person’ 
Person.cpp:41:32: error: no ‘std::string Person::getSurname()’ member function declared in class ‘Person’ 

Neyi yanlış yaptığım hakkında bir fikrin var mı? Bu tam olarak aynı std :: formatting benim için daha önce çalıştı ama şimdi sadece std :: string işlevleri basit bir Person sınıfı oluşturmaya çalışırken tanınmıyor. sözlerinden

+7

Yapı komutunda başlık ne yapıyor? Ve insanlar kurucu başlatıcı listelerine karşı ne yapar? – chris

+0

Ne yazık ki, bu programa öğretmenlik yapmamın tek yolu budur ve öğretmenlerim/işaretçilerim tarafından tercih edilmesinin daha kolay olması nedeniyle –

+8

eğitmenleriniz bu konuda yanlıştır. Paranı geri iste. – juanchopanza

cevap

9

:

g++ Main.cpp Person.h Person.cpp -o test 

Chris belirttiği gibi, derleme komut satırında başlık dosyaları dahil etmek sıra dışıdır. muhtemelen daha önce kullanılan biraz farklı çağırma:

g++ -c Main.cpp Person.h Person.cpp 

Main.o, Person.o oluşturur, aynı zamanda bir Person.h.gch precompiled header. Önceden derlenmiş üstbilgi, geçerli oluşturma komutunuzla yeniden oluşturulmaz, ancak hala kullanılıyor, bu nedenle Person.h için yapılan değişiklikler alınmaz.

İlgili konular