2013-04-28 127 views
5

我认为自己是一个相当新手的C++程序员,我从来没有经历过这个错误。错误:没有在类'_______'中声明的'__________'成员函数

我只是想创建一个类为我的功能,但我所有的std ::我的头文件中声明前缀的功能不被认可

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

//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 :: formatting在我以前工作过,但由于某些原因,现在只有std :: string函数在尝试创建一个简单的Person类时无法识别。

+7

你的构建命令中的标题是什么?人们对构造函数初始化列表有什么作用? – chris 2013-04-28 06:34:06

+0

不幸的是,这是我被教导编程的唯一途径,也是我的导师/标记首选的方式,因为它更容易让他们脱脂 – 2013-04-28 06:36:26

+8

那么你的导师对此是错误的。要求退款。 – juanchopanza 2013-04-28 06:37:51

回答

9

从评论:

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

克里斯指出,这是不寻常的,包括在编译命令行的头文件。稍微不同的调用,你可能之前使用:

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

创建Main.oPerson.o,也Person.h.gch编译头。预编译的头文件不会使用当前的构建命令重新生成,但仍在使用,因此对Person.h的更改不会被拾取。

相关问题