2013-04-28 31 views
5

Tôi coi bản thân mình là một lập trình viên C++ khá mới và tôi chưa bao giờ gặp phải lỗi này trước đây.lỗi: không có chức năng thành viên '__________' được khai báo trong lớp '_______'

Tôi chỉ đơn giản là cố gắng để tạo ra một lớp cho chức năng của tôi, nhưng tất cả std :: tôi chức năng tiền tố khai báo trong tập tin tiêu đề của tôi không được công nhận

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

chính

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

Và đây là lỗi tôi nhận

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’ 

Bất kỳ ý tưởng nào tôi đang làm sai? Điều này chính xác cùng std :: định dạng đã làm việc cho tôi trước, nhưng vì một số lý do bây giờ chỉ có std :: string chức năng không được công nhận khi cố gắng tạo ra một lớp Person đơn giản.

+7

Tiêu đề đang thực hiện trong lệnh xây dựng của bạn là gì? Và những gì mọi người có chống lại danh sách khởi tạo constructor? – chris

+0

Thật không may đây là cách duy nhất tôi đã được dạy cho chương trình và nó được ưa thích bởi gia sư/đánh dấu của tôi vì nó dễ dàng hơn cho họ để skim –

+8

Vâng gia sư của bạn là sai về điều này. Yêu cầu trả lại tiền của bạn. – juanchopanza

Trả lời

9

Từ nhận xét:

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

Như chris chỉ ra, nó là bất thường để bao gồm các tập tin tiêu đề trong dòng lệnh biên dịch. Một gọi hơi khác nhau mà bạn có thể sử dụng trước đó:

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

tạo Main.o, Person.o, mà còn là một tiêu đề Person.h.gch biên dịch sẵn. Các tiêu đề biên dịch trước không được tái tạo với lệnh xây dựng hiện tại của bạn, nhưng vẫn được sử dụng, vì vậy các thay đổi đối với Person.h không được chọn.

Các vấn đề liên quan