2013-04-28 7 views
5

में घोषित कोई '__________' सदस्य फ़ंक्शन मैं खुद को एक नौसिखिया सी ++ प्रोग्रामर के रूप में मानता हूं और मैंने पहले कभी इस त्रुटि का अनुभव नहीं किया है।त्रुटि: कक्षा '_______'

मैं बस :: मेरी समारोह के लिए, लेकिन मेरी सभी एसटीडी एक वर्ग बनाने के लिए पहले से जुड़ा हुआ कार्यों मेरी हेडर फाइल में घोषित कोशिश कर रहा हूँ मान्यता प्राप्त नहीं किया जा रहा है

//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  

सीपीपी

//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; 
} 

मुख्य

//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; 
} 

और इस त्रुटि मैं

प्राप्त कर रहा हूँ है
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’ 

कोई विचार क्या मैं गलत कर रहा हूं? यह सटीक वही std :: स्वरूपण पहले मेरे लिए काम करता है लेकिन कुछ कारणों से अब केवल एक साधारण व्यक्ति वर्ग बनाने की कोशिश करते समय केवल std :: स्ट्रिंग फ़ंक्शंस को पहचाना नहीं जाता है।

+7

आपके बिल्ड कमांड में हेडर क्या कर रहा है? और कन्स्ट्रक्टर प्रारंभकर्ता सूचियों के खिलाफ लोगों के पास क्या है? – chris

+0

दुर्भाग्यवश यह एकमात्र तरीका है जिसे मुझे प्रोग्राम करने के लिए सिखाया गया है और यह मेरे ट्यूटर्स/मार्करों द्वारा पसंदीदा है क्योंकि उनके लिए –

+8

स्किम करना आसान है, ठीक है आपके शिक्षक इस बारे में गलत हैं। अपने पैसे वापस पूछो। – juanchopanza

उत्तर

9

टिप्पणियों से:

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

क्रिस के रूप में बताया है, यह संकलन कमांड लाइन में हेडर फाइल शामिल करने के लिए असामान्य है। एक थोड़ा अलग मंगलाचरण कि आप शायद पहले प्रयोग:

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

Main.o, Person.o बनाता है, लेकिन यह भी एक Person.h.gch precompiled शीर्ष लेख। प्रीकंपिल्ड हेडर को आपके वर्तमान बिल्ड कमांड के साथ पुन: उत्पन्न नहीं किया जाता है, लेकिन अभी भी इसका उपयोग किया जाता है, इसलिए Person.h में परिवर्तन नहीं उठाए जाते हैं।

संबंधित मुद्दे