头文件中未定义的变量

时间:2015-07-08 10:54:19

标签: c++ header

感谢您抽出宝贵时间查看我的问题。我花了很多时间寻找但却找不到解决这个问题的方法:

我有一个Person类及其各自的Header文件Person.h。 cpp类很难理解变量name,age和iq是什么。

//Person.cpp

/*
Makes a person.
A person has a name, an age, and an IQ level.
We will create many of these objects within other classes.
*/

#include "Person.h"

Person::Person() //Empty constructor
{

}
Person::Person(string thename, int theage, int theiq)
{
    name = thename;
    age = theage;
    iq = theiq;
}

string getName()
{
    return name; //Error: identifier "name" is undefined
}

int getAge()
{
    return age; //Error: identifier "age" is undefined
}

int getIq()
{
    return iq; //Error: identifier "iq" is undefined
}

void setName(string aName)
{
    name = aName; //Error: identifier "name" is undefined
}

void setAge(int aAge)
{
    age = aAge; //Error: identifier "age" is undefined
}

void setIq(int aIq)
{
    iq = aIq; //Error: identifier "iq" is undefined
}

标题文件

//=================================
// include guard
#ifndef __PERSON_H_INCLUDED__
#define __PERSON_H_INCLUDED__

//=================================
// forward declared dependencies


//=================================
// included dependencies
#include <string> //For the name


//=================================

using namespace std;

class Person
{
public:
    Person(); //Default constructor
    Person(string thename, int theage, int theiq); //Constructor
    string getName();
    int getAge();
    int getIq();
    void setName(int aName);
    void setAge(int aAge);
    void setIq(int aIq);

private:
    string name;
    int age, iq;
};

#endif //__PERSON_H_

SURELY 我没有在Person.cpp中定义变量吗?它已经确切地知道变量name,age和iq是什么,因为它已经看到了头文件。为什么它不能理解这些变量是什么?

如果我这样做,或者有任何我想念的东西,请务必为我拼出来。我几乎不是一个中级C ++程序员,所以我可能听不懂行话。甚至像范围,继承和定义这样的事情都在我脑海中浮现。

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

您遇到错误的部分是这样做的: 返回类型 Person :: 函数名称(参数)

用于声明部分的功能。

例如,对于 getAge 函数,请执行以下操作:

int Person::getAge() {
      return age;
}

您遇到错误的原因是:

  1. 首先,您的目的是定义您在 Person 类中声明的函数。
  2. 在返回语句中,您希望返回人员类的年龄成员。但你只是回归年龄。
  3. 首先在函数体内部开始搜索 age 。如果未找到,则在外部范围内搜索。如果仍然未找到年龄是未知标识符。
  4. 修复后会发生什么:

    1. 返回类型 Person :: 函数名称(参数) 中的 Person :: 部分表示查看Person类的范围。
    2. 然后在return语句中,我们返回 Person 类的 age 成员。但是这次我们要查看 Person 类的范围,因此我们返回 age 成员并修复错误。

答案 1 :(得分:0)

您需要更改

string getName()

string Person::getName()
<。>在.cpp文件中。与其他人一样。编译器需要知道这是Person类的一部分。

答案 2 :(得分:0)

你的功能

string getName()
{
return name; //Error: identifier "name" is undefined
}

未定义类成员函数。相反,你正在声明和定义一个(完全不同的和无关的)自由函数。因此,name在此函数的范围内未定义。