error: no '__________' member function declared in class '_______'
c++
Solution
From the comments:
g++ Main.cpp Person.h Person.cpp -o test
As chris pointed out, it is unusual to include the header files in the compile command line. A slightly different invocation that you probably used earlier:
g++ -c Main.cpp Person.h Person.cpp
creates `Main.o`, `Person.o`, but also a `Person.h.gch` precompiled header. The precompiled header isn't regenerated with your current build command, but is still used, so changes to `Person.h` do not get picked up.
Problem
I regard myself as a fairly novice c++ programmer and I have never experienced this error before. I'm simply trying to create a class for my function but all my std:: prefixed functions declared in my header file are not being recognised ``` //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 ``` //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; } ``` And this is the error I'm receiving ``` 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’ ``` Any ideas what I'm doing wrong? This exact same std:: formatting has worked for me before but for some reason now only the std::string functions aren't recognised when trying to create a simple Person class.